Poniżej znajduje się zestawienie wyników, na których czytałem. Znacznie więcej informacji znajdziesz w powiązanych blogach i dokumentach.
Po pierwsze, może się zdarzyć, że DBCC CHECKDB
nie wykryje niespójności, jeśli wyłączysz sumę kontrolną lub weryfikację torn_page. Cytat Paula Randala w tym poście :
Masz rację - jeśli podarta strona lub suma kontrolna nie jest włączona, nie ma nic, co można wykryć, jeśli chodzi o opcje ochrony strony. CHECKDB może nadal wykrywać uszkodzenia, które wykryje po przeprowadzeniu wszystkich sprawdzeń spójności, które robi - ale na przykład nie zobaczy uszkodzeń w środku wartości danych.
Ha - to jest szaleństwo w włączaniu sum kontrolnych strony - nic się nie dzieje, dopóki strona nie zostanie wczytana, zmieniona i spisana ponownie. Jedynym sposobem zmuszenia stron do pobierania sum kontrolnych jest ich zmiana - np. Poprzez przebudowanie wszystkich indeksów, które mogą być niesmaczne - w ogóle nie ma narzędzia „dotykowego”.
Powyższa sytuacja może Cię dotknąć, jeśli zaktualizujesz bazę danych z SQL Server 2000 lub wcześniejszej wersji do 2005 lub późniejszej. Następnie musisz ręcznie włączyć sumy kontrolne strony za pomocą ALTER DATABASE, aby je uaktywnić. Ale wtedy pojawia się drugi akapit powyższego cytatu i może cię niepokoić.
BACKUP WITH CHECKSUM
wykryje niespójności sumy kontrolnej, ale tylko wtedy, gdy strona ma już zapisaną sumę kontrolną, podczas tworzenia kopii zapasowej. Zwykle DBCC CHECKDB
wykrywa również te błędy, więc nie jest dobrym pomysłem stosowanie funkcji BACKUP WITH CHECKSUM w celu zastąpienia DBCC CHECKDB .
Teraz jest druga możliwość, aby DBCC CHECKDB
nie pokazywać żadnych niespójności, nawet jeśli istnieją. W tym celu ponownie cytuję Paula Randala w nieporozumieniach dotyczących zepsucia: czy mogą zniknąć? :
A co z znikającymi zepsuciami? Od tego zależy sposób sprawdzania spójności. Sprawdzanie spójności działa tylko na przydzielonych stronach bazy danych. Jeśli strona nie jest do niczego przypisana, to 8192 bajtów jest bez znaczenia i nie można jej interpretować. Nie daj się pomylić między zarezerwowanym a przydzielonym - wyjaśniam, że w pierwszych nieporozumieniach pisz tutaj. Dopóki strona jest przydzielana, będzie sprawdzana spójność przez DBCC CHECKDB, w tym testowanie sumy kontrolnej strony, jeśli istnieje. Uszkodzenie może wydawać się „znikać”, jeśli uszkodzona strona zostanie przydzielona w czasie działania DBCC CHECKDB, ale następnie zostanie cofnięta przy następnym uruchomieniu DBCC CHECKDB. Za pierwszym razem zostanie zgłoszony jako uszkodzony, ale za drugim razem nie zostanie przydzielony, więc nie jest sprawdzana spójność i nie zostanie zgłoszony jako uszkodzony. Zepsucie wygląda, jakby tajemniczo zniknęło. Ale tak się nie stało - po prostu uszkodzona strona nie jest już przydzielana. Nic nie stoi na przeszkodzie, aby SQL Server zwalniał uszkodzoną stronę - w rzeczywistości to właśnie robi wiele napraw DBCC CHECKDB - zwalnia to, co jest zepsute, i naprawia wszystkie linki.
Nie mam ostatecznej odpowiedzi na twoje pytanie, ale ponieważ DBCC CHECKDB
sprawdza tylko przydzielone strony, nie będzie wykazywał niespójności na zwolnionych stronach. Jedyną sytuacją, jaką mogę sobie teraz wyobrazić, jest to, że BACKUP tworzy kopie zapasowe również tych zwolnionych stron, pokazując potencjalne błędy sum kontrolnych, które zostały pominięte DBCC CHECKDB
.