Diese Frage wurde durch diesen früheren Beitrag und meine Ablage einer Datenbank für zukünftige Untersuchungen ausgelöst, die wie folgt wiederhergestellt wurde:
BACKUP 'BrokenDatabase' detected an error on page (1:123456) in file ’BrokenDatabase.mdf'.
Error: 3043, Severity: 16, State: 1.
In der verknüpften Frage und der Sicherung, die ich für DBCC-PAGE-Untersuchungen bereit habe, wurde DBCC CHECKDB ohne Fehler übergeben, aber es liegt offensichtlich eine Beschädigung vor.
Welche Arten von Beschädigungen können auftreten, bei denen CHECKDB bestanden wird, eine SICHERUNG MIT CHECKSUM jedoch fehlschlägt?
sql-server-2008
sql-server-2005
dbcc
corruption
Mark Storey-Smith
quelle
quelle
Antworten:
Das Folgende ist eine Zusammenstellung der Ergebnisse, die ich gelesen habe. In den verlinkten Blogs und Dokumenten finden Sie weitaus mehr Informationen.
Erstens kann es vorkommen, dass
DBCC CHECKDB
Inkonsistenzen nicht erkannt werden, wenn Sie die Prüfsumme oder die Überprüfung von torn_page deaktivieren. Ein Zitat von Paul Randal in diesem Beitrag :Die obige Situation kann Sie treffen, wenn Sie eine Datenbank von SQL Server 2000 oder früher auf 2005 oder später aktualisiert haben. Sie müssen dann die Seitenprüfsummen manuell mit ALTER DATABASE aktivieren, um sie zu aktivieren. Aber dann setzt der zweite Absatz des obigen Zitats ein und könnte Sie beunruhigen.
BACKUP WITH CHECKSUM
erkennt Prüfsummeninkonsistenzen, jedoch nur, wenn auf der Seite bereits eine Prüfsumme geschrieben wurde, wenn sie gesichert wird.DBCC CHECKDB
Erkennt normalerweise auch diese Fehler, daher ist es keine gute Idee, BACKUP WITH CHECKSUM zu verwenden, um DBCC CHECKDB zu ersetzen .Jetzt gibt es eine zweite Möglichkeit
DBCC CHECKDB
, um keine Inkonsistenzen zu zeigen, auch wenn es einige gibt. Dazu zitiere ich nur noch einmal Paul Randal in Missverständnissen über Korruption: Können sie verschwinden? :Ich habe keine endgültige Antwort auf Ihre Frage, aber da
DBCC CHECKDB
nur zugewiesene Seiten überprüft werden, werden auf freigegebenen Seiten keine Inkonsistenzen angezeigt. Die einzige Situation, die ich mir jetzt vorstellen kann, ist, dass BACKUP auch die freigegebenen Seiten sichert, die potenzielle Prüfsummenfehler aufweisen, die übersprungen wurdenDBCC CHECKDB
.quelle