DBCC CHECKDB (Transact-SQL)
Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
Sprawdza integralność logiczną i fizyczną wszystkich obiektów w określonej bazie danych, wykonując następujące operacje:
Uruchamia DBCC CHECKALLOC w bazie danych.
Uruchamia DBCC CHECKTABLE na każdej tabeli i widoku w bazie danych.
Uruchamia DBCC CHECKCATALOG w bazie danych.
Sprawdza poprawność zawartości każdego indeksowanego widoku w bazie danych.
Sprawdza spójność na poziomie łącza między metadanymi tabeli a katalogami i plikami systemu plików podczas przechowywania danych typu varbinary(max) w systemie plików przy użyciu FILESTREAM.
Weryfikuje dane usługi Service Broker w bazie danych.
Oznacza to, że polecenia DBCC CHECKALLOC
, DBCC CHECKTABLE
lub DBCC CHECKCATALOG
nie muszą być uruchamiane oddzielnie od DBCC CHECKDB
. Aby uzyskać bardziej szczegółowe informacje na temat kontroli, które te polecenia wykonują, zobacz opisy tych poleceń.
DBCC CHECKDB
jest obsługiwana w bazach danych zawierających tabele zoptymalizowane pod kątem pamięci, ale walidacja odbywa się tylko w tabelach opartych na dyskach. Jednak w ramach tworzenia kopii zapasowych i odzyskiwania bazy danych weryfikacja CHECKSUM
jest wykonywana dla plików w grupach plików zoptymalizowanych pod kątem pamięci.
Ponieważ opcje naprawy dbCC nie są dostępne dla tabel zoptymalizowanych pod kątem pamięci, należy regularnie tworzyć kopie zapasowe baz danych i testować kopie zapasowe. Jeśli wystąpią problemy z integralnością danych w tabeli zoptymalizowanej dla pamięci, należy przywrócić z ostatniej kopii zapasowej o znanej dobrej jakości.
Transact-SQL konwencje składni
Składnia
DBCC CHECKDB
[ [ ( database_name | database_id | 0
[ , NOINDEX
| , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ]
) ]
[ WITH
{
[ ALL_ERRORMSGS ]
[ , EXTENDED_LOGICAL_CHECKS ]
[ , NO_INFOMSGS ]
[ , TABLOCK ]
[ , ESTIMATEONLY ]
[ , { PHYSICAL_ONLY | DATA_PURITY } ]
[ , MAXDOP = number_of_processors ]
}
]
]
Argumenty
database_name | database_id | 0
Nazwa lub identyfikator bazy danych, dla której ma zostać uruchomiona kontrola integralności. Jeśli nie określono wartości lub jeśli określono wartość 0, używana jest bieżąca baza danych. Nazwy baz danych muszą być zgodne z regułami dotyczącymi identyfikatorów .
NOINDEX
Określa, że intensywne kontrole indeksów nieklastrowanych dla tabel użytkowników nie są wykonywane. Ten wybór zmniejsza całkowity czas wykonywania.
NOINDEX
nie ma wpływu na tabele systemowe, ponieważ kontrole integralności są zawsze wykonywane w indeksach tabel systemowych.
REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD
Określa, że DBCC CHECKDB
naprawia znalezione błędy. Użyj opcji REPAIR_*
tylko w ostateczności. Określona baza danych musi być w trybie pojedynczego użytkownika, aby użyć jednej z następujących opcji naprawy.
REPAIR_ALLOW_DATA_LOSS
Próbuje naprawić wszystkie zgłoszone błędy. Te naprawy mogą spowodować utratę danych.
Ostrzeżenie
Opcja
REPAIR_ALLOW_DATA_LOSS
może spowodować utratę większej ilości danych niż w przypadku przywrócenia z ostatniej znanej dobrej kopii zapasowej. Zobacz ostrzeżenie o utracie danych z REPAIR_ALLOW_DATA_LOSSFirma Microsoft zawsze zaleca przywrócenie z ostatniej sprawdzonej kopii zapasowej jako podstawowej metody odzyskania danych po błędach zgłoszonych przez
DBCC CHECKDB
. OpcjaREPAIR_ALLOW_DATA_LOSS
nie jest alternatywą dla przywracania ze znanej dobrej kopii zapasowej. Jest to opcja ostatniej szansy, zalecana do użycia tylko wtedy, gdy przywracanie z kopii zapasowej nie jest możliwe.Niektóre błędy, które można naprawić tylko przy użyciu opcji
REPAIR_ALLOW_DATA_LOSS
, mogą obejmować dealokację wiersza, strony lub serii stron, aby usunąć błędy. Wszystkie odprzydzielone dane nie są już dostępne ani możliwe do odzyskania dla użytkownika, a dokładna zawartość odprzydzielonych danych nie może być określona. W związku z tym integralność referencyjna może nie być dokładna po cofnięciu przydziału wierszy lub stron, ponieważ ograniczenia klucza obcego nie są sprawdzane ani utrzymywane w ramach tej operacji naprawy. Użytkownik musi sprawdzić integralność referencyjną bazy danych (przy użyciuDBCC CHECKCONSTRAINTS
) po użyciu opcjiREPAIR_ALLOW_DATA_LOSS
.Przed wykonaniem naprawy należy utworzyć fizyczne kopie plików należących do tej bazy danych. Obejmuje to podstawowy plik danych (
.mdf
), wszystkie pomocnicze pliki danych (.ndf
), wszystkie pliki dziennika transakcji (.ldf
) i inne kontenery, które tworzą bazę danych, w tym katalogi pełnotekstowe, foldery strumienia plików, zoptymalizowane pod kątem pamięci dane itd.Przed wykonaniem naprawy rozważ zmianę stanu bazy danych na tryb
EMERGENCY
i próbę wyodrębnienia jak największej ilości informacji z tabel krytycznych i zapisania tych danych.REPAIR_FAST
Utrzymuje składnię tylko dla wstecznej kompatybilności. Nie są wykonywane żadne akcje naprawy.
REPAIR_REBUILD
Wykonuje naprawy, które nie mają możliwości utraty danych. Ta opcja może obejmować szybkie naprawy, takie jak naprawianie brakujących wierszy w indeksach nieklastrowanych oraz czasochłonne naprawy, takie jak ponowne kompilowanie indeksu.
Ten argument nie naprawia błędów dotyczących danych FILESTREAM.
Ważny
Ponieważ DBCC CHECKDB
z dowolną z opcji REPAIR_*
są całkowicie rejestrowane i możliwe do odzyskania, firma Microsoft zawsze zaleca użytkownikowi użycie DBCC CHECKDB
z dowolnymi opcjami REPAIR_*
w ramach transakcji (wykonaj BEGIN TRANSACTION
przed uruchomieniem polecenia), aby użytkownik mógł potwierdzić, że chce zaakceptować wyniki operacji. Następnie użytkownik może wykonać COMMIT TRANSACTION
, aby zatwierdzić całą pracę wykonaną przez operację naprawy. Jeśli użytkownik nie chce akceptować wyników operacji, może wykonać ROLLBACK TRANSACTION
, aby cofnąć skutki operacji naprawy.
Aby naprawić błędy, zalecamy przywrócenie z kopii zapasowej. Operacje naprawy nie uwzględniają żadnych ograniczeń, które mogą istnieć w tabelach lub między nimi. Jeśli określona tabela jest objęta co najmniej jednym ograniczeniem, zalecamy uruchomienie DBCC CHECKCONSTRAINTS
po operacji naprawy. Jeśli musisz użyć REPAIR_*
, uruchom DBCC CHECKDB
bez opcji naprawy, aby określić, który poziom naprawy zastosować. Jeśli używasz poziomu REPAIR_ALLOW_DATA_LOSS
, zalecamy wykonanie kopii zapasowej bazy danych przed uruchomieniem DBCC CHECKDB
za pomocą tej opcji.
ALL_ERRORMSGS
Wyświetla wszystkie zgłoszone błędy na obiekt. Wszystkie komunikaty o błędach są domyślnie wyświetlane. Określenie lub pominięcie tej opcji nie ma wpływu. Komunikaty o błędach są sortowane według identyfikatora obiektu, z wyjątkiem komunikatów wygenerowanych z bazy danych tempdb.
ROZSZERZONE_LOGICZNE_SPRAWDZENIA
Jeśli poziom zgodności wynosi 100, wprowadzony w programie SQL Server 2008 (10.0.x), ta opcja wykonuje testy spójności logicznej dla widoku indeksowanego, indeksów XML i indeksów przestrzennych, w których są obecne.
Aby uzyskać więcej informacji, zobacz Przeprowadzanie kontroli spójności logicznej na indeksach w dalszej części tego artykułu.
NO_INFOMSGS
Pomija wszystkie komunikaty informacyjne.
TABLOCK
Powoduje, że DBCC CHECKDB
uzyskuje blokady zamiast korzystania z wewnętrznej migawki bazy danych. Obejmuje to krótkoterminową blokadę wyłączną (X) w bazie danych.
TABLOCK
powoduje, że DBCC CHECKDB
działa szybciej w bazie danych przy dużym obciążeniu, ale zmniejsza współbieżność dostępną na bazie danych podczas działania DBCC CHECKDB
.
Ważny
TABLOCK
ogranicza kontrole, które są wykonywane; DBCC CHECKCATALOG
nie jest uruchamiana w bazie danych, a dane usługi Service Broker nie są weryfikowane.
TYLKO SZACOWANIE
Przedstawia szacowaną ilość tempdb
miejsca wymaganego do uruchomienia DBCC CHECKDB
ze wszystkimi innymi określonymi opcjami. Rzeczywiste sprawdzanie bazy danych nie jest wykonywane.
PHYSICAL_ONLY
Ogranicza sprawdzanie do integralności fizycznej struktury strony oraz nagłówków rekordów i spójności alokacji bazy danych. Ta kontrola została zaprojektowana w celu zapewnienia niewielkiej kontroli spójności fizycznej bazy danych, ale może również wykrywać rozdarte strony, błędy sumy kontrolnej i typowe awarie sprzętowe, które mogą naruszyć bezpieczeństwo danych użytkownika.
Pełne uruchomienie DBCC CHECKDB
może trwać znacznie dłużej niż wcześniejsze wersje. To zachowanie występuje, ponieważ:
- Testy logiczne są bardziej kompleksowe.
- Niektóre struktury, które mają być sprawdzane, są bardziej złożone.
- Wprowadzono wiele nowych kontroli w celu uwzględnienia nowych funkcji.
W związku z tym użycie opcji PHYSICAL_ONLY
może spowodować znacznie krótszy czas wykonywania dla DBCC CHECKDB
w dużych bazach danych i jest zalecane do częstego używania w systemach produkcyjnych. Nadal zalecamy okresowe wykonywanie pełnego przebiegu DBCC CHECKDB
. Częstotliwość tych przebiegów zależy od czynników specyficznych dla poszczególnych firm i środowisk produkcyjnych.
Ten argument zawsze implikuje NO_INFOMSGS
i nie jest dozwolony z żadną z dostępnych opcji naprawy.
Ostrzeżenie
Określenie PHYSICAL_ONLY
powoduje, że DBCC CHECKDB
pomija wszystkie kontrole danych FILESTREAM.
CZYSTOŚĆ DANYCH
Powoduje, że DBCC CHECKDB
sprawdza bazę danych pod kątem wartości kolumn, które są nieprawidłowe lub poza zakresem. Na przykład DBCC CHECKDB
wykrywa kolumny z wartościami daty i godziny, które są większe lub mniejsze niż dopuszczalny zakres dla typu danych datetime; lub kolumn typu danych liczbowych dziesiętnych lub przybliżonych z wartościami skalowania lub precyzji, które nie są prawidłowe.
Kontrole integralności wartości kolumny są domyślnie włączone i nie wymagają opcji DATA_PURITY
. W przypadku baz danych uaktualnionych z wcześniejszych wersji programu SQL Server sprawdzanie wartości kolumny nie jest domyślnie włączone, dopóki DBCC CHECKDB WITH DATA_PURITY
nie zostanie uruchomiony w bazie danych bez błędów. Następnie DBCC CHECKDB
domyślnie sprawdza integralność wartości kolumny. Aby uzyskać więcej informacji na temat wpływu CHECKDB
przez uaktualnienie bazy danych z wcześniejszych wersji programu SQL Server, zobacz sekcję Uwagi w dalszej części tego artykułu.
Ostrzeżenie
Jeśli określono PHYSICAL_ONLY
, kontrole integralności kolumn nie są wykonywane.
Nie można naprawić błędów walidacji zgłaszanych przez tę opcję przy użyciu opcji naprawy DBCC. Aby uzyskać informacje na temat ręcznego poprawiania tych błędów, zobacz MSSQLSERVER_2570.
MAXDOP
Dotyczy: SQL Server 2014 (12.x) Service Pack 2 i późniejsze wersje
Zastępuje opcję konfiguracji max degree of parallelism
opcją sp_configure
dla instrukcji.
MAXDOP
może przekroczyć wartość skonfigurowaną przy użyciu sp_configure
. Jeśli MAXDOP
przekroczy wartość skonfigurowaną za pomocą zarządcy zasobów, aparat bazy danych programu SQL Server używa wartości MAXDOP
zarządcy zasobów opisanej w ALTER WORKLOAD GROUP. Wszystkie reguły semantyczne używane z opcją konfiguracji max degree of parallelism
mają zastosowanie podczas korzystania z wskazówki MAXDOP
zapytania. Aby uzyskać więcej informacji, zobacz Konfiguracja serwera: maksymalny stopień równoległości.
Ostrzeżenie
Jeśli MAXDOP
jest ustawiona na zero, program SQL Server wybierze max degree of parallelism
do użycia.
Uwagi
DBCC CHECKDB
nie sprawdza indeksów wyłączonych. Aby uzyskać więcej informacji o wyłączonych indeksach, zobacz Wyłącz indeksy i ograniczenia.
Jeśli typ zdefiniowany przez użytkownika jest oznaczony jako uporządkowany względem bajtów, musi istnieć tylko jedna jego serializacja. Brak spójnej serializacji bajtowo uporządkowanych typów zdefiniowanych przez użytkownika powoduje błąd 2537 podczas uruchamiania DBCC CHECKDB
. Aby uzyskać więcej informacji, zobacz Tworzenie typów User-Defined — wymagania.
Ponieważ bazy danych zasobów DBCC CHECKDB
może zwrócić dodatkowe wyniki. Polecenie zwraca dodatkowe zestawy wyników, gdy nie są ustawione żadne opcje lub gdy jest ustawiona opcja PHYSICAL_ONLY
lub ESTIMATEONLY
.
W programie SQL Server 2005 (9.x) z dodatkiem Service Pack 2 lub nowszym, uruchomienie DBCC CHECKDB
nie powoduje już wyczyszczenia pamięci podręcznej planu dla instancji programu SQL Server. Przed Service Packiem 2 dla SQL Server 2005 (9.x), wykonanie DBCC CHECKDB
powoduje wyczyszczenie pamięci podręcznej planu. Wyczyszczenie pamięci podręcznej planu powoduje ponowne skompilowanie wszystkich późniejszych planów wykonywania i może spowodować nagły, tymczasowy spadek wydajności zapytań.
Przeprowadzanie kontroli spójności logicznej na indeksach
Sprawdzanie spójności logicznej indeksów różni się w zależności od poziomu zgodności bazy danych w następujący sposób:
Jeśli poziom zgodności wynosi co najmniej 100 (wprowadzony w programie SQL Server 2008 (10.0.x)):
O ile nie określono
NOINDEX
,DBCC CHECKDB
wykonuje zarówno testy spójności fizycznej, jak i logicznej dla pojedynczej tabeli oraz we wszystkich indeksach nieklastrowanych. Jednak w przypadku indeksów XML, indeksów przestrzennych i widoków indeksowanych są domyślnie wykonywane tylko testy spójności fizycznej.Jeśli określono
WITH EXTENDED_LOGICAL_CHECKS
, dokonywana jest weryfikacja logiczna w widoku indeksowanym, indeksach XML i indeksach przestrzennych, jeśli są obecne. Domyślnie testy spójności fizycznej są wykonywane przed sprawdzaniem spójności logicznej. JeśliNOINDEX
jest również określona, są wykonywane tylko testy logiczne.
Kontrole spójności logicznej porównują wewnętrzną tabelę indeksów obiektu indeksu z tabelą użytkownika, na które wskazuje. Aby zidentyfikować odstające wiersze, jest konstruowane zapytanie wewnętrzne w celu wykonania pełnego przecięcia tabel wewnętrznej i użytkownika. Uruchomienie tego zapytania może mieć znaczący wpływ na wydajność, a jego postęp nie może być śledzony. Dlatego zalecamy określenie WITH EXTENDED_LOGICAL_CHECKS
tylko wtedy, gdy podejrzewasz problemy z indeksem, które nie mają związku z uszkodzeniem fizycznym, lub jeśli sumy kontrolne na poziomie strony zostały wyłączone i podejrzewasz uszkodzenie sprzętu na poziomie kolumny.
Jeśli indeks jest indeksem filtrowanym,
DBCC CHECKDB
przeprowadza sprawdzanie spójności w celu sprawdzenia, czy wpisy indeksu spełniają predykat filtru.Jeśli poziom zgodności wynosi 90 lub mniej, chyba że określono
NOINDEX
,DBCC CHECKDB
wykonuje zarówno testy spójności fizycznej, jak i logicznej dla pojedynczej tabeli lub widoku indeksowanego oraz na wszystkich indeksach nieklastrowanych i XML. Indeksy przestrzenne nie są obsługiwane.W programie SQL Server 2016 (13.x) i nowszych wersjach dodatkowe kontrole dotyczące utrwalonych kolumn obliczeniowych, kolumn UDT i filtrowanych indeksów nie są uruchamiane domyślnie, aby uniknąć kosztownych ocen wyrażeń. Ta zmiana znacznie skraca długość trwania
CHECKDB
w przypadku baz danych zawierających te obiekty. Jednak sprawdzanie spójności fizycznej tych obiektów jest zawsze wykonywane. Tylko wtedy, gdyEXTENDED_LOGICAL_CHECKS
opcja jest określona, są wykonywane oceny wyrażeń, oprócz testów logicznych, które są już obecne w ramach opcjiEXTENDED_LOGICAL_CHECKS
(widok indeksowany, indeksy XML i indeksy przestrzenne).
Informacje na temat poziomu zgodności bazy danych
Wewnętrzna migawka bazy danych
DBCC CHECKDB
używa wewnętrznej migawki bazy danych na potrzeby spójności transakcyjnej wymaganej do wykonania tych testów. Zapobiega to blokowaniu i problemom ze współbieżnością podczas wykonywania tych poleceń. Aby uzyskać więcej informacji, zobacz sekcję "Zobacz rozmiar rzadkiego pliku migawki bazy danych" oraz sekcję "Użycie wewnętrznej migawki bazy danych DBCC" w DBCC. Jeśli nie można utworzyć migawki lub określono TABLOCK
, DBCC CHECKDB
uzyskuje blokady w celu uzyskania wymaganej spójności. W takim przypadku wymagana jest wyłączna blokada bazy danych do przeprowadzania kontroli alokacji, a blokady udostępnionej tabeli są wymagane do przeprowadzania kontroli tabeli.
DBCC CHECKDB
zawodzi podczas działania przeciwko bazie danych master
, jeśli nie można utworzyć wewnętrznej migawki bazy danych.
Uruchamianie DBCC CHECKDB
względem tempdb
nie wykonuje żadnych kontroli alokacji ani wykazu i musi uzyskać udostępnione blokady tabeli w celu przeprowadzania kontroli tabeli. Wynika to z faktu, że ze względu na wydajność migawki bazy danych nie są dostępne w tempdb
. Oznacza to, że nie można uzyskać wymaganej spójności transakcyjnej.
Jak DBCC CHECKDB tworzy wewnętrzną migawkową bazę danych od wersji SQL Server 2014
DBCC CHECKDB
tworzy wewnętrzną bazę danych migawek.Wewnętrzna baza danych migawek jest tworzona przy użyciu plików fizycznych. Na przykład w przypadku bazy danych z
database_id = 10
z trzema plikamiE:\Data\my_DB.mdf
,E:\Data\my_DB.ndf
iE:\Data\my_DB.ldf
wewnętrzna baza danych migawek jest tworzona przy użyciu plikówE:\Data\my_DB.mdf_MSSQL_DBCC11
iE:\Data\my_DB.ndf_MSSQL_DBCC11
. Wartośćdatabase_id
migawki todatabase_id + 1
. Należy również pamiętać, że nowe pliki są tworzone w tym samym folderze przy użyciu konwencji nazewnictwa<filename.extension>_MSSQL_DBCC<database_id_of_snapshot>
. Dla dziennika transakcji nie jest tworzony żaden rozrzedny plik.Nowe pliki są oznaczone jako rzadkie pliki na poziomie systemu plików. Rozmiar na dysku używany przez nowe pliki zwiększa się na podstawie ilości danych aktualizowanych w źródłowej bazie danych podczas wykonywania polecenia
DBCC CHECKDB
. Rozmiar nowych plików jest tym samym plikiem co plik.mdf
lub.ndf
.Nowe pliki są usuwane na końcu przetwarzania
DBCC CHECKDB
. Te rozproszone pliki, które są tworzone przezDBCC CHECKDB
, mają ustawiony atrybut „Usuń przy zamknięciu”.
Ostrzeżenie
Jeśli system operacyjny napotka nieoczekiwane zamknięcie, gdy polecenie DBCC CHECKDB
jest w toku, te pliki nie są czyszczone. Zajmują one miejsce i mogą ewentualnie powodować błędy w przyszłych DBCC CHECKDB
wykonaniach. W takim przypadku można usunąć te nowe pliki po potwierdzeniu, że obecnie nie jest wykonywane polecenie DBCC CHECKDB
.
Nowe pliki są widoczne przy użyciu zwykłych narzędzi plików, takich jak Eksplorator Windows.
Notatka
Przed wprowadzeniem SQL Server 2014 (12.x) zamiast tego używano nazwanych strumieni plików do tworzenia wewnętrznych plików migawek. Nazwane strumienie plików używały formatu <nazwa_pliku.rozszerzenie>:MSSQL_DBCC<database_id_of_snapshot>. Nazwane strumienie plików nie są widoczne przy użyciu zwykłych narzędzi plików, takich jak Eksplorator Windows. W związku z tym w programie SQL Server 2012 (11.x) i starszych wersjach mogą wystąpić komunikaty o błędach 7926 i 5030 podczas uruchamiania polecenia DBCC CHECKDB
dla plików baz danych znajdujących się na woluminie ReFS-formatowany. Dzieje się tak dlatego, że strumienie plików nie mogą być tworzone w odpornym systemie plików (RefS).
Sprawdzanie i naprawianie danych FILESTREAM
Po włączeniu funkcji FILESTREAM dla bazy danych i tabeli można opcjonalnie przechowywać varbinary(max) binarnych dużych obiektów (BLOB) w systemie plików. W przypadku korzystania z DBCC CHECKDB
w bazie danych, która przechowuje BLOB-y w systemie plików, funkcja DBCC sprawdza spójność na poziomie powiązań między systemem plików a bazą danych.
Jeśli na przykład tabela zawiera kolumnę varbinary(max), która używa atrybutu FILESTREAM, DBCC CHECKDB
sprawdza, czy istnieje mapowanie jeden do jednego między katalogami systemu plików i plikami i wierszami tabeli, kolumnami i wartościami kolumn.
DBCC CHECKDB
może naprawić uszkodzenie, jeśli określisz opcję REPAIR_ALLOW_DATA_LOSS
. Aby naprawić uszkodzenie FILESTREAM, DBCC usuwa wszystkie wiersze tabeli, które nie mają danych systemu plików.
Najlepsze rozwiązania
Zalecamy użycie opcji PHYSICAL_ONLY
w przypadku częstego użytkowania na systemach produkcyjnych. Użycie PHYSICAL_ONLY
może znacznie skrócić czas wykonywania dla DBCC CHECKDB
w dużych bazach danych. Zalecamy również okresowe uruchamianie DBCC CHECKDB
bez opcji. Częstotliwość wykonywania tych przebiegów zależy od danego przedsiębiorstwa i jego środowiska produkcyjnego.
W usłudze Azure SQL Managed Instance dostępna przestrzeń dyskowa musi pomieścić cały wewnętrzny plik zrzutu bazy danych utworzony przez DBCC CHECKDB
, niezależnie od tego, ile jest rzeczywiście używane. Może to prowadzić do sytuacji, w której wykonywanie DBCC CHECKDB
w bardzo dużej, ale rozrzedowanej bazie danych (rozmiar danych jest znacznie mniejszy niż rozmiar pliku bazy danych) kończy się niepowodzeniem z powodu braku miejsca w wystąpieniu zarządzanym SQL. Jeśli DBCC CHECKDB
zużywa wszystkie dostępne miejsce do magazynowania podczas wykonywania, zostanie wyświetlony następujący komunikat o błędzie:
Msg 1133, Level 16, State 3, Line 1
The managed instance has reached its storage limit. To storage usage for the managed instance cannot exceed (...) MBs.
You might need to temporarily scale up your SQL managed instance storage capacity before running `DBCC CHECKDB` again.
Równoległe sprawdzanie obiektów
Domyślnie DBCC CHECKDB
wykonuje równoległe sprawdzanie obiektów. Stopień równoległości jest automatycznie określany przez procesor zapytań. Maksymalny stopień równoległości jest skonfigurowany tak samo jak zapytania równoległe. Aby ograniczyć maksymalną liczbę procesorów dostępnych do sprawdzania DBCC, użyj sp_configure. Więcej informacji znajdziesz w Server configuration: max degree of parallelism. Sprawdzanie równoległe można wyłączyć przy użyciu flagi śledzenia 2528. Aby uzyskać więcej informacji, zobacz Trace Flags.
Notatka
Ta funkcja nie jest dostępna w każdej wersji programu SQL Server. Aby uzyskać więcej informacji, zobacz równoległe sprawdzanie spójności w sekcji zarządzania RDBMS wersji i obsługiwanych funkcji programu SQL Server 2022.
Omówienie komunikatów o błędach DBCC
Po zakończeniu DBCC CHECKDB
polecenia zostanie zapisany komunikat w dzienniku błędów programu SQL Server. Jeśli polecenie DBCC zostanie wykonane pomyślnie, komunikat wskazuje powodzenie i czas uruchomienia polecenia. Jeśli polecenie DBCC zatrzymuje się przed zakończeniem sprawdzania z powodu błędu, komunikat wskazuje, że polecenie zostało zakończone, wartość stanu i czas uruchomienia polecenia. W poniższej tabeli wymieniono i opisano wartości stanu, które można uwzględnić w komunikacie.
Stan | Opis |
---|---|
0 |
Zgłoszono błąd 8930. Oznacza to uszkodzenie metadanych, które zakończyły działanie polecenia DBCC. |
1 |
Zgłoszono błąd numer 8967. Wystąpił wewnętrzny błąd DBCC. |
2 |
Wystąpił błąd podczas naprawy bazy danych w trybie awaryjnym. |
3 |
Oznacza to uszkodzenie metadanych, które zakończyły działanie polecenia DBCC. |
4 |
Wykryto naruszenie potwierdzenia lub dostępu. |
5 |
Wystąpił nieznany błąd, który zakończył polecenie DBCC. |
Program SQL Server rejestruje datę i godzinę uruchomienia sprawdzania spójności dla bazy danych bez błędów (lub "czyste" sprawdzanie spójności). Jest to nazywane last known clean check
. Po pierwszym uruchomieniu bazy danych ta data jest zapisywana w dzienniku zdarzeń (EventID-17573) i dzienniku błędów w następującym formacie:
CHECKDB for database '<database>' finished without errors on 2022-05-05 18:08:22.803 (local time). This is an informational message only; no user action is required.
Raportowanie błędów
Zrzut stosu (SQLDump<nnnn>.txt
, SQLDump<nnnn>.log
, SQLDump<nnnn>.mdmp
) jest tworzony w katalogu programu SQL Server LOG
za każdym razem, gdy DBCC CHECKDB
wykryje uszkodzenie. Gdy funkcje Użycie funkcji zbierania danych i raportowania błędów są włączone dla wystąpienia programu SQL Server, plik jest automatycznie przekazywany do firmy Microsoft. Zebrane dane służą do ulepszania funkcjonalności programu SQL Server.
Plik zrzutu zawiera wyniki polecenia DBCC CHECKDB
i dodatkowe dane wyjściowe diagnostyczne. Dostęp jest ograniczony do konta usługi programu SQL Server i członków roli administratora systemu. Domyślnie rola administratora systemu zawiera wszystkich członków grupy BUILTIN\Administrators
systemu Windows i grupy administratora lokalnego. Polecenie DBCC nie ulega awarii, jeśli proces zbierania danych zakończy się niepowodzeniem.
Usuwanie błędów
Jeśli jakiekolwiek błędy są zgłaszane przez DBCC CHECKDB
, zalecamy przywrócenie bazy danych z kopii zapasowej bazy danych, zamiast uruchamiania DBCC CHECKDB
z jedną z opcji REPAIR_*
. Jeśli żadna kopia zapasowa nie istnieje, uruchomienie naprawy poprawia zgłoszone błędy. Opcja naprawy do użycia jest określona na końcu listy zgłoszonych błędów. Jednak skorygowanie błędów przy użyciu opcji REPAIR_ALLOW_DATA_LOSS
może wymagać usunięcia niektórych stron, a w związku z tym niektórych danych.
W pewnych okolicznościach wartości mogą być wprowadzane do bazy danych, które nie są prawidłowe lub znajdują się poza zakresem w zależności od typu danych kolumny.
DBCC CHECKDB
może wykrywać wartości kolumn, które nie są prawidłowe dla wszystkich typów danych kolumn. W związku z tym uruchomienie DBCC CHECKDB
z opcją DATA_PURITY
w bazach danych, które zostały uaktualnione z wcześniejszych wersji programu SQL Server, może ujawnić istniejące błędy wartości kolumny. Ponieważ program SQL Server nie może automatycznie naprawić tych błędów, wartość kolumny musi zostać zaktualizowana ręcznie. Jeśli CHECKDB
wykryje taki błąd, CHECKDB
zwróci ostrzeżenie, numer błędu 2570 oraz informacje w celu zidentyfikowania odpowiedniego wiersza i ręcznego skorygowania błędu.
Naprawę można wykonać w ramach transakcji użytkownika, aby umożliwić użytkownikowi wycofanie wprowadzonych zmian. Jeśli naprawy zostaną wycofane, baza danych nadal zawiera błędy i musi zostać przywrócona z kopii zapasowej. Po zakończeniu napraw wykonaj kopię zapasową bazy danych.
Usuwanie błędów w trybie awaryjnym bazy danych
Jeśli baza danych została ustawiona na tryb awaryjny przy użyciu instrukcji ALTER DATABASE, DBCC CHECKDB
może wykonać specjalne naprawy w bazie danych, jeśli określono opcję REPAIR_ALLOW_DATA_LOSS
. Te naprawy mogą umożliwić przywrócenie zazwyczaj niemożliwych do odzyskania baz danych do stanu fizycznej spójności i ponownego ich uruchomienia. Te naprawy powinny być używane w ostateczności i tylko wtedy, gdy nie można przywrócić bazy danych z kopii zapasowej. Gdy baza danych jest ustawiona na tryb awaryjny, jest oznaczona jako READ_ONLY, rejestrowanie jest wyłączone, a dostęp jest ograniczony do członków stałej roli serwera sysadmin.
Notatka
Nie można uruchomić polecenia DBCC CHECKDB
w trybie awaryjnym wewnątrz transakcji użytkownika i wycofać transakcji po wykonaniu.
Gdy baza danych jest w trybie awaryjnym i DBCC CHECKDB
z klauzulą REPAIR_ALLOW_DATA_LOSS
jest uruchamiana, są wykonywane następujące akcje:
DBCC CHECKDB
wykorzystuje strony, które zostały oznaczone jako niedostępne z powodu błędów wejścia/wyjścia lub sumy kontrolnej, tak jakby te błędy nie wystąpiły. W ten sposób zwiększa się prawdopodobieństwo odzyskiwania danych z bazy danych.DBCC CHECKDB
próbuje odzyskać bazę danych przy użyciu zwykłych technik odzyskiwania opartych na dziennikach.Jeśli odzyskiwanie bazy danych nie powiedzie się z powodu uszkodzenia dziennika transakcji, dziennik transakcji zostanie ponownie skompilowany. Ponowne kompilowanie dziennika transakcji może spowodować utratę spójności transakcyjnej.
Ostrzeżenie
Opcja REPAIR_ALLOW_DATA_LOSS
może spowodować utratę większej ilości danych niż w przypadku przywrócenia z ostatniej znanej dobrej kopii zapasowej. Zapoznaj się z ostrzeżeniem o utracie danych przy użyciu REPAIR_ALLOW_DATA_LOSS
Jeśli polecenie DBCC CHECKDB
powiedzie się, baza danych jest w stanie fizycznie spójnym, a stan bazy danych jest ustawiony na ONLINE. Jednak baza danych może zawierać co najmniej jedną niespójność transakcyjną. Zalecamy uruchomienie DBCC CHECKCONSTRAINTS, aby zidentyfikować wszelkie wady logiki biznesowej i natychmiast utworzyć kopię zapasową bazy danych.
Jeśli polecenie DBCC CHECKDB
zakończy się niepowodzeniem, nie można naprawić bazy danych.
Ostrzeżenie o utracie danych przy użyciu REPAIR_ALLOW_DATA_LOSS
Opcja REPAIR_ALLOW_DATA_LOSS
jest obsługiwaną funkcją programu SQL Server. Jednak nie zawsze może być najlepszą opcją do doprowadzenia bazy danych do stanu fizycznie spójnego. W przypadku powodzenia opcja REPAIR_ALLOW_DATA_LOSS
może spowodować utratę danych.
W rzeczywistości może to spowodować utratę większej ilości danych, niż gdyby użytkownik przywrócił bazę danych z ostatniej znanej dobrej kopii zapasowej. Firma Microsoft zawsze zaleca przywracanie systemu z ostatniej znanej dobrej kopii zapasowej jako podstawowej metody odzyskiwania danych po błędach zgłoszonych przez DBCC CHECKDB
.
Opcja REPAIR_ALLOW_DATA_LOSS
nie jest alternatywą dla przywracania ze znanej dobrej kopii zapasowej. Jest to opcja awaryjna zalecana do użycia tylko wtedy, gdy przywracanie z kopii zapasowej jest niemożliwe.
Po odbudowie dziennika nie ma pełnej gwarancji na zgodność z ACID.
Po odbudowaniu dziennika wykonanie DBCC CHECKDB
jest automatyczne i zarówno naprawia, jak i raportuje problemy ze spójnością fizyczną.
Spójność danych logicznych oraz wymuszone przez logikę biznesową ograniczenia muszą być weryfikowane ręcznie.
Rozmiar dziennika transakcji jest pozostawiony do domyślnego rozmiaru i musi zostać ręcznie dostosowany do jego ostatniego rozmiaru.
Uruchom polecenie DBCC CHECKDB z opcją REPAIR_ALLOW_DATA_LOSS w replikowanych bazach danych
Uruchomienie polecenia DBCC CHECKDB
z opcją REPAIR_ALLOW_DATA_LOSS
może mieć wpływ na bazy danych użytkowników (bazy danych publikacji i subskrypcji) oraz bazę danych dystrybucji używaną przez replikację. Bazy danych publikacji i subskrypcji obejmują opublikowane tabele i tabele metadanych dotyczących replikacji. Należy pamiętać o następujących potencjalnych problemach w tych bazach danych:
Opublikowane tabele. Akcje wykonywane przez proces
CHECKDB
naprawy uszkodzonych danych użytkownika mogą nie być replikowane:Replikacja scalania używa wyzwalaczy do śledzenia zmian w opublikowanych tabelach. Jeśli wiersze są wstawiane, aktualizowane lub usuwane przez proces
CHECKDB
, wyzwalacze nie są wyzwalane; dlatego zmiana nie jest replikowana.Replikacja transakcyjna używa dziennika transakcji do śledzenia zmian w opublikowanych tabelach. Następnie agent czytnika dzienników przenosi te zmiany do bazy danych dystrybucji. Niektóre naprawy DBCC, chociaż zarejestrowane, nie mogą być replikowane przez Agenta Log Reader. Jeśli na przykład alokacja strony danych zostanie cofnięta przez proces
CHECKDB
, agent czytnika dzienników nie tłumaczy tej dezalokacji na instrukcję DELETE; w związku z tym zmiana nie jest replikowana.Tabele metadanych replikacji. Akcje wykonywane przez proces
CHECKDB
w celu naprawy uszkodzonych tabel metadanych replikacji wymagają usunięcia i ponownego skonfigurowania replikacji.
Jeśli musisz uruchomić polecenie DBCC CHECKDB
z opcją REPAIR_ALLOW_DATA_LOSS
w bazie danych użytkownika lub bazie danych dystrybucji:
Wstrzymaj system: Zatrzymaj aktywność w bazie danych oraz we wszystkich innych bazach danych w topologii replikacji, a następnie spróbuj zsynchronizować wszystkie węzły. Aby uzyskać więcej informacji, zobacz Quiesce a Replication Topology (Replication Transact-SQL Programming).
Wykonaj
DBCC CHECKDB
.Jeśli raport
DBCC CHECKDB
zawiera naprawy wszystkich tabel w bazie danych dystrybucji lub wszystkich tabel metadanych replikacji w bazie danych użytkownika, usuń i ponownie skonfiguruj replikację. Aby uzyskać więcej informacji, zobacz Wyłączanie publikacji i dystrybucji.Jeśli raport
DBCC CHECKDB
zawiera naprawy wszystkich replikowanych tabel, przeprowadź walidację danych, aby ustalić, czy istnieją różnice między danymi w bazie danych publikacji i subskrypcji.
Zestaw wyników
DBCC CHECKDB
zwraca następujący zestaw wyników. Wartości mogą się różnić z wyjątkiem sytuacji, w których określono opcje ESTIMATEONLY
, PHYSICAL_ONLY
lub NO_INFOMSGS
:
DBCC results for 'model'.
Service Broker Msg 9675, Level 10, State 1: Message Types analyzed: 13.
Service Broker Msg 9676, Level 10, State 1: Service Contracts analyzed: 5.
Service Broker Msg 9667, Level 10, State 1: Services analyzed: 3.
Service Broker Msg 9668, Level 10, State 1: Service Queues analyzed: 3.
Service Broker Msg 9669, Level 10, State 1: Conversation Endpoints analyzed: 0.
Service Broker Msg 9674, Level 10, State 1: Conversation Groups analyzed: 0.
Service Broker Msg 9670, Level 10, State 1: Remote Service Bindings analyzed: 0.
DBCC results for 'sys.sysrowsetcolumns'.
There are 630 rows in 7 pages for object 'sys.sysrowsetcolumns'.
DBCC results for 'sys.sysrowsets'.
There are 97 rows in 1 pages for object 'sys.sysrowsets'.
DBCC results for 'sysallocunits'.
There are 195 rows in 3 pages for object 'sysallocunits'.
There are 0 rows in 0 pages for object "sys.sysasymkeys".
DBCC results for 'sys.syssqlguides'.
There are 0 rows in 0 pages for object "sys.syssqlguides".
DBCC results for 'sys.queue_messages_1977058079'.
There are 0 rows in 0 pages for object "sys.queue_messages_1977058079".
DBCC results for 'sys.queue_messages_2009058193'.
There are 0 rows in 0 pages for object "sys.queue_messages_2009058193".
DBCC results for 'sys.queue_messages_2041058307'.
There are 0 rows in 0 pages for object "sys.queue_messages_2041058307".
CHECKDB found 0 allocation errors and 0 consistency errors in database 'model'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
DBCC CHECKDB
zwraca następujący zestaw wyników (komunikat) po określeniu NO_INFOMSGS
:
The command(s) completed successfully.
DBCC CHECKDB
zwraca następujący zestaw wyników po określeniu PHYSICAL_ONLY
:
DBCC results for 'model'.
CHECKDB found 0 allocation errors and 0 consistency errors in database 'master'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
DBCC CHECKDB
zwraca następujący zestaw wyników po określeniu ESTIMATEONLY
.
Estimated TEMPDB space needed for CHECKALLOC (KB)
-------------------------------------------------
13
(1 row(s) affected)
Estimated TEMPDB space needed for CHECKTABLES (KB)
--------------------------------------------------
57
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Uprawnienia
Wymaga członkostwa w sysadmin stałej roli serwera lub stałej roli bazy danych db_owner.
Przykłady
A. Sprawdź zarówno bieżącą, jak i inną bazę danych
Poniższy przykład wykonuje DBCC CHECKDB
dla bieżącej bazy danych oraz dla bazy danych AdventureWorks2022
.
-- Check the current database.
DBCC CHECKDB;
GO
-- Check the AdventureWorks2022 database without nonclustered indexes.
DBCC CHECKDB (AdventureWorks2022, NOINDEX);
GO
B. Sprawdź bieżącą bazę danych, pomijając komunikaty informacyjne
Poniższy przykład sprawdza bieżącą bazę danych i pomija wszystkie komunikaty informacyjne.
DBCC CHECKDB WITH NO_INFOMSGS;
GO