Wenn Sie in SQL Server 2000 beschädigte Seiten identifizieren möchten, sollte die Datenbankoption TORN_PAGE_DETECTION auf TRUE gesetzt sein.
In SQL 2005 und höher hat eine neue Einstellung PAGE_VERIFY die alte TORN_PAGE_DETECTION ersetzt, mit der zwei verschiedene Arten der Seitenüberprüfung ausgewählt werden können: TORN_PAGE_DETECTION und CHECKSUM.
Nun stellt sich die Frage, welches gesetzt werden soll - TORN_PAGE_DETECTION oder CHECKSUM?
TORN_PAGE_DETECTION - Schreibt ein Bit für jeweils 512 Byte auf einer Seite, sodass Sie erkennen können, wenn eine Seite nicht erfolgreich auf die Festplatte geschrieben wurde. Der Haken ist, dass es Ihnen nicht sagt, ob die in diesen 512 Bytes gespeicherten Daten tatsächlich korrekt sind oder nicht, da möglicherweise einige Bytes falsch geschrieben wurden.
CHECKSUM - berechnet eine Prüfsumme der Seite sowohl beim Schreiben als auch beim Lesen einer Seite, vorausgesetzt, sie enthält eine Prüfsumme.
Der SQL Server berechnet die Prüfsumme basierend auf dem Bitmuster auf der Seite, speichert sie im Seitenkopf und gibt dann eine E / A aus, um die Seite zu schreiben. Wenn der SQL Server die Seite liest, berechnet er die Prüfsumme mit derselben Logik neu und vergleicht sie dann mit dem im Seitenkopf verfügbaren Wert. Wenn der Prüfsummenwert übereinstimmt, wird davon ausgegangen, dass die Seite während des Schreib- / Lesezyklus nicht beschädigt wurde.
Da die Kosten für die Berechnung der Prüfsumme beim Lesen und Schreiben jeder Seite anfallen, kann dies den CPU-Overhead erhöhen und möglicherweise den Durchsatz Ihrer Arbeitslast beeinträchtigen. Beachten Sie außerdem, dass die Prüfsumme für ein bestimmtes Bitmuster auf der Seite nicht eindeutig ist. Möglicherweise können zwei Seiten demselben Prüfsummenwert zugeordnet werden. Es besteht also die Möglichkeit, dass eine Seitenbeschädigung unentdeckt bleibt.
Referenz: Prüfsumme in SQL2005
Um Ihre Fragen gezielt zu beantworten:
Ich glaube, dass Checksum in SQL2005 eingeführt wurde und dass das Aktualisieren oder Wiederherstellen einer Datenbank von einer früheren Version die Methode zur Überprüfung der vorherigen Seite beibehalten würde. dh es gab kein implizites Upgrade.
Ja, CHECKSUM wurde in SQL Server 2005 eingeführt und ist das DEFAULT . Wenn Sie von 2000 auf 2005 aktualisieren, müssen Sie die Datenbankoption Page Verify explizit ändern, um CHECKSUM zu verwenden.
Wenn Sie die bereits in SQL 2005 erstellte Datenbank auf einem anderen Server wiederherstellen, auf dem SQL 2005 ausgeführt wird, müssen Sie sie nicht festlegen. Es bleibt so lange bestehen, wie Sie die Option "Seitenüberprüfung" aktiviert haben.
Es ist mir nicht gelungen zu recherchieren, als Torn Page Detection einging
Von: http://support.microsoft.com/kb/230785
Versionen von SQL Server vor 7.0
Frühere Versionen von SQL Server als 7.0 boten keine Protokollparität oder Funktionen zur Erkennung zerrissener Bits. Tatsächlich können diese Versionen dieselbe Protokollseite mehrmals schreiben, bis die Protokolldatensätze die 2-KB-Protokollseite ausfüllen. Dies kann Transaktionen offenlegen, die erfolgreich festgeschrieben wurden. Wenn die Protokollseite während eines Fehlers neu geschrieben wird, wird ein Sektor mit der festgeschriebenen Transaktion möglicherweise nicht ordnungsgemäß neu geschrieben.
Daher gibt es TORN_PAGE_DETECTION seit SQL Server 7.0. Selbst dann war die Standardeinstellung, dass es nicht aktiviert war (gleicher Link) .
Hinweis: Die Erkennung zerrissener Seiten ist in SQL Server 7.0 standardmäßig nicht aktiviert. In sp_dboption erfahren Sie, wie Sie die Erkennung auf Ihrem System aktivieren.
Wenn die Datenbank für eine 7.0-Instanz entwickelt und anschließend aktualisiert worden wäre, hätte sie daher die vorhandene Option PAGE VERIFY von NONE (wie in seiner Antwort unter @ThomasStringer angegeben) aktualisiert.
Edit: 24.09.2013 So verbessern Sie die Antwort:
Unter Bezugnahme auf meine internen SQL Server-Notizen von SQLSkills stellte ich fest, dass Sie mithilfe eines Seitenabbilds überprüfen können, ob die Erkennung von Bitabrissen (TORN_PAGE_DETECTION oder CHECKSUM) aktiviert war oder nicht:
use database_name -- change here for your database !!
checkpoint
go
dbcc traceon (3604) -- send output to screen
go
dbcc page (dbaalert, 1,1,0)
dbcc traceoff (3604) -- turn off the trace flag
go
m_tornBits : Enthält entweder die Seitenprüfsumme oder die Bits, die durch die Schutzbits für zerrissene Seiten verschoben wurden - je nachdem, welche Form des Seitenschutzes für die Datenbank aktiviert ist.
Hinweis : Ich habe keine älteren SQL Server-Versionen ausgeführt. Unten wird von SQL Server 2000 und höher bestätigt . Wenn du ein 7.0 oder 6.5 hast, kannst du es auch bestätigen :-)
