TL; DR: मुझे अनुक्रमित दृश्य में एक अपरिहार्य भ्रष्टाचार मिला है। यहाँ विवरण हैं:
चल रहा है
DBCC CHECKDB([DbName]) WITH EXTENDED_LOGICAL_CHECKS, DATA_PURITY, NO_INFOMSGS, ALL_ERRORMSGS
मेरे किसी डेटाबेस में निम्न त्रुटि उत्पन्न होती है:
Msg 8907, स्तर 16, राज्य 1, पंक्ति 1 स्थानिक सूचकांक, XML सूचकांक या अनुक्रमित दृश्य 'ViewName' (ऑब्जेक्ट आईडी 784109934) में वे पंक्तियाँ हैं जो दृश्य परिभाषा द्वारा निर्मित नहीं थीं। यह आवश्यक रूप से इस डेटाबेस में डेटा के साथ एक अखंडता मुद्दे का प्रतिनिधित्व नहीं करता है। (...)
CHECKDB को तालिका 'ViewName' में 0 आवंटन त्रुटियाँ और 1 संगतता त्रुटियाँ मिलीं।
repair_rebuild न्यूनतम मरम्मत स्तर (...) है।
मैं समझता हूं कि यह संदेश इंगित करता है कि अनुक्रमित दृश्य 'ViewName' का भौतिक डेटा अंतर्निहित क्वेरी के साथ समान नहीं है। हालांकि, डेटा को मैन्युअल रूप से सत्यापित करने से कोई भी विसंगतियां नहीं होती हैं:
SELECT * FROM ViewName WITH (NOEXPAND)
EXCEPT
SELECT ...
from T1 WITH (FORCESCAN)
join T2 on ...
SELECT ...
from T1 WITH (FORCESCAN)
join T2 on ...
EXCEPT
SELECT * FROM ViewName WITH (NOEXPAND)
NOEXPAND
(केवल) सूचकांक के उपयोग को बल देने के लिए किया गया था ViewName
। FORCESCAN
अनुक्रमित दृश्य को होने से रोकने के लिए उपयोग किया गया था। निष्पादन योजना काम करने के दोनों उपायों की पुष्टि करती है।
यहां कोई पंक्तियाँ नहीं लौटाई जा रही हैं, जिसका अर्थ है कि दोनों तालियाँ समान हैं। (केवल पूर्णांक और गाइड कॉलम हैं, कोलाज खेलने में नहीं आते हैं)।
दृश्य पर अनुक्रमणिका को पुन: बनाकर या चलाकर त्रुटि को ठीक नहीं किया जा सकता हैDBCC CHECKDB REPAIR_ALLOW_DATA_LOSS
। फिक्स को दोहराने से भी मदद नहीं मिली। इस त्रुटि की रिपोर्ट क्यों करता है DBCC CHECKDB
? मैं इससे छुटकारा कैसे पाऊं?
(यहां तक कि अगर पुनर्निर्माण ने इसे ठीक कर दिया, तो मेरा सवाल अभी भी खड़ा होगा - एक त्रुटि की रिपोर्ट क्यों की गई है, हालांकि मेरे डेटा जांच प्रश्न सफलतापूर्वक चलते हैं?)
अद्यतन: बग को कुछ रिलीज़ में ठीक किया गया है। मैं अब इसे SQL Server 2014 SP2 CU 5 में पुन: पेश नहीं कर सकता। 2014 SP2 KB में KB आलेख के बिना एक फ़िक्सेस है Creating non-clustered index causes DBCC CheckDB With Extended_Logical_Checks to raise corruption error
:। इसके बारे में दो कनेक्ट बग्स को बंद कर दिया गया है:
- https://connect.microsoft.com/SQLServer/feedback/details/847233/creating-non-clustered-index-causes-dbcc-checkdb-with-extended-logical-checks-to-raise-corruption-error
- https://connect.microsoft.com/SQLServer/feedback/details/795478/unfixable-dbcc-checkdb-error-that-is-also-a-false-positive-and-otherwise-strange
If the indexed view does not contain an aggregate over values of type float or real and you receive errors 8907 or 8708, drop the index on the view and re-create it. Do not use ALTER INDEX REBUILD to try to remove the differences between the stored and the computed view, because ALTER INDEX REBUILD does not recalculate the view before rebuilding the index. Then run DBCC CHECKTABLE on the View to verify no differences remain.
[1]
अंकन टिप्पणी मार्क-डाउन में काम नहीं करता।