Der Columnstore-Index in der Dateigruppe read_only verhindert CheckDB


15

Wenn die Dateigruppe einen Columnstore-Index enthält, wird die Einstellung einer Dateigruppe für die gesamte Datenbank read_onlyverhindert dbcc checkdb. Beim Versuch, checkdboder checkfilegroup( für eine beliebige Dateigruppe in der Datenbank, einschließlich Schreib- / Lesezugriffs-Sekundärdateien und[PRIMARY] ) auszuführen , wird der folgende Fehler zurückgegeben ...

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.

Gibt es eine unterstützte Methode, um Spaltenspeicherdaten in einer schreibgeschützten Dateigruppe zu haben? Oder bin ich in diesem Szenario von Integritätsprüfungen ausgeschlossen?

Repro

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

Haftungsausschluss: Cross-posted in Technet-Foren

Antworten:


12

Das Problem tritt auf, wenn DBCC versucht, eine gelöschte Bitmap für eine schreibgeschützte Columnstore-Tabelle zu überprüfen.

Gelöschte Bitmaps werden in derselben Dateigruppe wie die Spaltenspeichertabelle gespeichert. Sie verfolgen Zeilen, die logisch aus komprimierten Zeilengruppen gelöscht wurden.

Soweit ich das beurteilen kann, ist in den internen Systemtabellen (unter SQL Server 2017 CU3) alles korrekt organisiert, und der größte Teil des DBCC-Codes berücksichtigt korrekt die ausgeblendeten Rowsets, in denen die im Spaltenspeicher gelöschten Bitmaps enthalten sind.

Aus irgendeinem Grund führt eine Prüfung auf Offline- oder schreibgeschützte Dateigruppen zu einer nicht behandelten Ausnahme:

Stack aufrufen

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.

Dieselbe Offline- / Nur-Lese-Prüfung wird mehrere Male zuvor in der DBCC-Verarbeitung (wenn Fakten gesammelt werden) ohne Probleme durchgeführt.

Das Problem tritt auf, wenn DBCC CHECKDBoder DBCC FILEGROUP(in einer beliebigen Dateigruppe) ausgeführt wird oder DBCC CHECKTABLEeine bestimmte schreibgeschützte Columnstore-Tabelle überprüft werden soll. Keiner dieser Fehler sollte eine schwerwiegende Fehlerbedingung erzeugen, die verhindert, dass die restlichen DBCC-Prüfungen ausgeführt werden. Dies muss also ein Fehler sein.


Oder bin ich in diesem Szenario von Integritätsprüfungen ausgeschlossen?

DBCC CHECKFILEGROUPUm dieses Problem zu umgehen , führen Sie Folgendes in der Columnstore-Dateigruppe aus, bevor sie schreibgeschützt ist (oder DBCC CHECKDBzu diesem Zeitpunkt ausgeführt wird):

  1. DBCC CHECKALLOC in der Datenbank
  2. Lauf DBCC CHECKCATALOG
  3. Führen Sie DBCC CHECKTABLEfür jede Tabelle (ohne columns Tabellen auf einer schreibgeschützten Dateigruppe)
  4. Möglicherweise möchten Sie auch ausführen DBCC CHECKCONSTRAINTS.

Siehe Konsistenzprüfungsoptionen für eine VLDB von Paul Randal und die Frage-und-Antwort-Aufteilung von DBCC CHECKDB über mehrere Tage .


9

Zunächst vielen Dank für die Informationen und den Wiedergabecode / die Situation.

Ich habe dies genommen und ein internes Element abgelegt, es wurde zugewiesen und wird in Kürze überprüft.

Sie können für die Arbeit in der Dateigruppe stimmen, um read_only zu verhindern, dass dbcc checkdb auf der SQL Server-Feedback-Site ausgeführt wird.

Ich werde diese Antwort mit weiteren Informationen aktualisieren, sobald sie verfügbar sind.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.