Read_only filegroup में कॉलमस्टोरस्टोर इंडेक्स चेकडीबी को रोकता है


15

यह करने के लिए एक filegroup की स्थापना प्रकट होता है read_onlyरोकता dbcc checkdbपूरे डेटाबेस के लिए करता है, तो filegroup एक columnstore सूचकांक में शामिल है। जब चलाने का प्रयास checkdbया checkfilegroup( के लिए किसी भी पढ़ने-लिखने की द्वितीयक और सहित डेटाबेस, में filegroup[PRIMARY] ), त्रुटि नीचे दिया जाता है ...

Msg 8921, Level 16, State 1, Line 24
Check terminated. A failure was detected while collecting facts. 
Possibly tempdb out of space or a system table is inconsistent. Check previous errors.

क्या रीड-ओनली फाइलग्रुप में कॉलमस्टोर डेटा रखने के लिए एक समर्थित तरीका है? या क्या मैं इस परिदृश्य में सत्यनिष्ठा जांच से बाहर हूं?

रेप्रो

create database check_fg_ro
go
use check_fg_ro
go
exec sp_changedbowner 'sa';
go
alter database check_fg_ro add filegroup check_fg_ro_2;
alter database check_fg_ro
    add file (
         name='check_fg_ro_2'
        ,filename='C:\check_fg_ro_2.ndf'
    ) to filegroup check_fg_ro_2;
go
create table foo ( 
    i int not null primary key
) on check_fg_ro_2;
go
create columnstore index ccix_foo on foo(i);
go
use master
go
alter database check_fg_ro modify filegroup check_fg_ro_2 read_only;
go
dbcc checkdb( check_fg_ro ) with no_infomsgs, all_errormsgs, extended_logical_checks;
/*
Msg 8921, Level 16, State 1, Line 24
Check terminated. A failure was detected while collecting facts. 
Possibly tempdb out of space or a system table is inconsistent. Check previous errors.
*/
go

अस्वीकरण: तकनीकी मंचों के लिए क्रॉस-पोस्ट

जवाबों:


12

समस्या तब होती है जब DBCC पढ़ने के लिए एक स्तंभ केवल हटाए गए बिटमैप को सत्यापित करने का प्रयास करता है।

हटाए गए बिटमैप को उसी फ़ाइल समूह पर कॉलमस्टोर तालिका के रूप में संग्रहीत किया जाता है। वे संपीड़ित पंक्ति समूहों से तार्किक रूप से हटाई गई पंक्तियों को ट्रैक करते हैं।

जहाँ तक मैं बता सकता हूँ, सब कुछ आंतरिक सिस्टम तालिकाओं (SQL Server 2017 CU3 पर) में सही तरीके से व्यवस्थित किया गया है, और अधिकांश DBCC कोड स्तंभों को हटाए गए स्तंभों को रखने वाले छिपे हुए पंक्तियों के लिए सही तरीके से खाता है।

किसी कारण के लिए, ऑफ़लाइन या केवल-पढ़ने के लिए फ़ाइल समूहों के लिए एक चेक अनचाहे अपवाद में परिणाम होता है:

कॉल स्टैक

Msg 8921, Level 16, State 1, Line 69
Check terminated. A failure was detected while collecting facts.
Possibly tempdb out of space or a system table is inconsistent.
Check previous errors.

बिना किसी समस्या के एक ही ऑफ़लाइन / केवल-पढ़ने की जाँच DBCC प्रोसेसिंग (जब तथ्य एकत्र किए जा रहे हैं) में पहले कई बार किया जाता है।

समस्या तब होती है जब DBCC CHECKDBया DBCC FILEGROUP(किसी भी filegroup पर) चलाया जाता है, या DBCC CHECKTABLEएक विशिष्ट केवल पढ़ने के लिए columnstore तालिका की जांच करने के लिए कहा जाता है। इनमें से किसी को भी एक घातक त्रुटि स्थिति उत्पन्न नहीं करनी चाहिए जो बाकी के DBCC चेक को चलाने से रोकती है, इसलिए यह एक बग होना चाहिए।


या क्या मैं इस परिदृश्य में सत्यनिष्ठा जांच से बाहर हूं?

वर्कअराउंड के रूप में, DBCC CHECKFILEGROUPकॉलमस्टोर फ़ाइलग्रुप पर इसे पढ़ने से पहले ही चलाएं (या DBCC CHECKDBउस समय चलाएं ):

  1. DBCC CHECKALLOC डेटाबेस पर
  2. Daud DBCC CHECKCATALOG
  3. DBCC CHECKTABLEप्रत्येक तालिका के लिए चलाएँ (केवल पढ़ने के लिए फ़ाइल समूह पर स्तंभ तालिका को छोड़कर)
  4. आप दौड़ना भी चाह सकते हैं DBCC CHECKCONSTRAINTS

पॉल रैंडल और कई दिनों के लिए क्यू एंड ए डिवाइडिंग DBCC CHECKDB द्वारा एक VLDB के लिए संगतता जाँच विकल्प देखें ।


9

सबसे पहले, जानकारी और प्रजनन कोड / स्थिति के लिए धन्यवाद।

मैंने इसे ले लिया है और एक आंतरिक आइटम दायर किया है, इसे सौंपा गया है और जल्द ही इसे देखा जाएगा।

आप फ़ाइल के लिए काम करने के लिए वोट कर सकते हैं read_only SQL सर्वर प्रतिक्रिया साइट पर चलने से dbcc चेकडब को रोकता है

जैसे ही यह उपलब्ध होगा मैं इस उत्तर को अधिक जानकारी के साथ अपडेट कर दूंगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.