Ich arbeite an der Implementierung von Paul Randals Methode zur manuellen Verteilung von DBCC CHECKDB über mehrere Tage für sehr große Datenbanken, die im Wesentlichen aus Folgendem besteht:
- Teilen Sie die Tabellen in der Datenbank ungefähr gleichmäßig auf 7 Buckets auf
- Führen Sie zweimal pro Woche einen DBCC CHECKALLOC aus
- Führen Sie einmal pro Woche einen DBCC CHECKCATALOG aus
- Ausführen eines DBCC CHECKTABLE an einem Eimer an jedem Wochentag
Hat jemand diese Technik angewendet? Gibt es da draußen vorhandene Skripte?
Ich mache mir Sorgen, dass dies möglicherweise nicht alles abdeckt, was CHECKDB tut. In der Books Online-Dokumentation für CHECKDB heißt es, dass neben CHECKALLOC, CHECKCATALOG und CHECKTABLE auch:
- Überprüft den Inhalt jeder indizierten Ansicht in der Datenbank.
- Überprüft die Konsistenz auf Verknüpfungsebene zwischen Tabellenmetadaten und Dateisystemverzeichnissen und -dateien, wenn varbinary (max) -Daten im Dateisystem mithilfe von FILESTREAM gespeichert werden. (Nur SQL 2008)
- Überprüft die Service Broker-Daten in der Datenbank.
Also hier sind meine Fragen:
Sind diese zusätzlichen Prüfungen notwendig / wichtig? (Indizierte Ansichten sind für mich wahrscheinlich etwas besorgniserregender. Ich glaube, wir verwenden noch keinen Service Broker oder FILESTREAM.)
Wenn ja, gibt es Möglichkeiten, diese zusätzlichen Prüfungen separat durchzuführen?
CHECKALLOC und CHECKCATALOG scheinen selbst bei großen Datenbanken sehr schnell zu laufen. Gibt es einen Grund, diese nicht jeden Tag auszuführen?
(Hinweis: Dies ist eine Standardroutine für Tausende vorhandener Datenbanken auf Hunderten von Servern oder zumindest für jede Datenbank über eine bestimmte Größe. Dies bedeutet, dass Optionen wie die Umstrukturierung aller Datenbanken zur Verwendung von CHECKFILEGROUP für uns nicht wirklich praktisch sind.)
quelle
Antworten:
Sie können
DBCC CHECKTABLE WITH EXTENDED_LOGICAL_CHECKS
direkt in den indizierten Ansichten ausgeführt werden . Das Überprüfen indizierter Ansichten kann unter bestimmten Umständen problematisch sein. Seien Sie daher bereit, die daraus resultierenden Fehlalarme zu untersuchen. (Paul Randal erwähnt in den Kommentaren zu dem Artikel, auf den verwiesen wird, auch, dass auch falsche Negative möglich sind, aber ich habe keine direkte Erfahrung damit.)Es gibt keine Unterstützung für die Ausführung des Service Broker oder für
FILESTREAM
separate Überprüfungen.Nicht dass ich wüsste.
Sie könnten auch in Betracht ziehen, zu laufen
DBCC CHECKCONSTRAINTS
. Diese Prüfung ist nicht inbegriffen inDBCC CHECKDB
, unabhängig von irgendwelchen Optionen können Sie angeben. Sie können auch daran denken, gelegentlich zu rennenCHECKDB
, wenn die Umstände dies zulassen.quelle
DBCC CHECKDB ist von entscheidender Bedeutung für SQL Server - Datenbanken zu 100% sicher sein , dass es keine Korruption. Aufgrund der massiven Größe von Datenbanken ist es jedoch sehr schwierig, ein Wartungsfenster zu finden, wenn Sie behaupten, rund um die Uhr verfügbar zu sein. Im Laufe der Jahre hat das SQL Server-Team verschiedene Mechanismen implementiert, mit denen die häufigsten Formen von Beschädigungen erkannt werden, insbesondere im Zusammenhang mit physischer Beschädigung durch Hardware.
SQL Server 2005 und höher verfügt über PAGE_VERIFY = CHECKSUM, mit dessen Hilfe Sie proaktiv physische Beschädigungen auf Datenbankseiten erkennen können, indem Sie jeder Seite beim Schreiben in das E / A-System eine Prüfsumme hinzufügen und die Prüfsumme beim Lesen von der Festplatte validieren.
Durch die Sicherung (vollständig oder differenziell) mit CHECKSUM wird außerdem garantiert, dass durch Hardware verursachte E / A-Beschädigungen erkannt werden.
Auf der Hardwareseite der Beschädigung kann SQL Server diese daher gut erkennen und melden. (Stellen Sie sicher, dass Sie auch wichtige Warnungen im Zusammenhang mit Korruption festlegen .)
Trotzdem immer noch logische Beschädigung , durch Scribbler verursachte Fehler - bei denen In-Memory-Seiten entweder durch Code von Drittanbietern beschädigt werden, der im SQL Server-Prozess ausgeführt wird, oder durch Treiber oder andere Software mit ausreichenden Berechtigungen, die im Windows-Kernelmodus und / oder in SQL Server ausgeführt werden Bugs , etc. sind nicht nachweisbar über Methoden und damit CHECKDB kommt ins Bild.
DBCC CHECKDB führt eine gründlichere Überprüfung durch, einschließlich der Überprüfung der Seitenkopfzeilen auf mögliche Beschädigungen, die auf keine andere Weise erkennbar sind.
Anstatt das Rad neu zu erfinden, würde ich Ihnen dringend empfehlen, sich die SQL Server Integrity Check-Lösung von Ola anzusehen
Effizientes Ausführen von DBCC CHECKDB:
Sie müssen nur kreativ sein, wenn Sie ein enges Wartungsfenster mit riesigen Datenbanken oder einer hohen Anzahl von Datenbanken haben, auf denen CHECKDB ausgeführt werden soll.
Nach dem Besuch der SQLSkills-Schulung habe ich Folgendes in meiner Umgebung implementiert:
DBCC CHECKTABLE
zusammen mitDBCC CHECKALLOC
und ausDBCC CHECKCATALOG
DBCC CHECKTABLE
,DBCC CHECKALLOC
undDBCC CHECKCATALOG
. Damit Sie ein Gefühl dafür bekommen, wie lange es normalerweise dauert, bis Ihre Schecks ausgeführt werden.NOINDEX
Option ausführen, da dies den Vorgang beschleunigt, da die nicht gruppierten Indizes in Benutzertabellen nicht überprüft werden. Dies hat einige Vorteile, da es als Datenbeschädigung nicht so kritisch ist, da keine Daten verloren gehen und Sie den Index bei Bedarf löschen und neu erstellen können.Natürlich kann die Enterprise Edition die parallele Ausführung von DBCC-Anweisungen nutzen. Achten Sie jedoch auf die MAXDOP-Einstellung, da dies möglicherweise Ihre gesamte CPU beansprucht. Dies kann vom Resource Governor stark eingeschränkt werden.
Hinweis: Wenn Sie die Spalte SPARSE haben, ist Ihre CHECKDB wie hier beschrieben absolut langsam .
Schließlich erfahren Sie, wie Sie eine Beschädigung der Datenbank verhindern können, indem Sie alle verfügbaren Tools + Ihr Vertrauen in Ihr Datenbankserver-Hardwaresystem und vor allem den Wert Ihrer Daten nutzen.
Einige ausgezeichnete Referenzen:
quelle