Summary: In diesem Blog werden die Schritte zur Durchführung einer SQL-Datenbankreparatur durch Ausführen von DBCC CHECKDB mit dem Befehl REPAIR_REBUILD erläutert. Es werden auch die möglichen Gründe für die Beschädigung der Datenbank und die Möglichkeiten zur Behebung der Probleme vor der Reparatur der Datenbank beschrieben. Der Blog erklärt die Ausführung von "DBCC CHECKDB REPAIR_REBUILD mit einem Beispiel" anhand einer schrittweisen Anleitung. Außerdem wird ein SQL-Reparaturtool als Alternative zu den DBCC CHECKDB-Reparaturoptionen vorgeschlagen.
Als Datenbankadministratoren müssen Sie den Befehl DBCC CHECKDB ausführen, um die physische und logische Konsistenz Ihrer SQL-Datenbank zu überprüfen. Diese Prüfungen können aufgrund einer Beschädigung der Datenbank fehlschlagen. Wenn DBCC CHECKDB Konsistenzfehler meldet, müssen Sie die Ursache für die Beschädigung der Datenbank ermitteln, um die bestmögliche Lösung zur Behebung der Fehler zu finden.
Mögliche Gründe für die Beschädigung der SQL-Datenbank
Nachfolgend sind die häufigsten Gründe aufgeführt, die zu einer Beschädigung der SQL Server-Datenbank führen:
- Defekte Hardware: Prüfen Sie, ob Festplattencontroller, Gerätetreiber oder andere Hardwarekomponenten defekt sind. Wenn die Konsistenzfehler durch Hardwareprobleme verursacht werden, stellen Sie sicher, dass die Konfiguration des Hardwaregeräts den Eingabe-/Ausgabeanforderungen der Microsoft SQL Server Database Engine entspricht. Andernfalls wenden Sie sich an Ihren Hardwareanbieter oder Gerätehersteller, um die zugrunde liegenden Hardwareprobleme zu beheben.
- Fehler in der SQL-Software: Wenn Sie kein Problem mit der zugrundeliegenden Hardware finden können, suchen Sie nach Softwarefehlern, da Microsoft dafür bekannt ist, dass Indexbeschädigungen oder Datenverluste bei der Ausführung eines Online-Indexwiederaufbaus in SQL Server 2012/2014 auftreten können.
- Virus- oder Malware-Angriff: Die SQL-Datenbankdateien können durch einen Virus- oder Malware-Angriff beschädigt werden, wodurch die Dateien unzugänglich werden.
Wenn keine Hardware- oder Software-Probleme erkannt werden, ist die beste Lösung zur Behebung der Beschädigung die Wiederherstellung der Datenbank von der letzten Sicherung. Wenn es keine gute Sicherung gibt, können Sie die Fehler beheben, indem Sie den Befehl DBCC CHECKDB mit einer Reparaturoption ausführen, die zur Behebung bestimmter Fehler erforderlich ist. Im folgenden Abschnitt wird erörtert, wie die Datenbankbeschädigung behoben werden kann, wenn “REPAIR_REBUILD” als Mindestreparaturstufe empfohlen wird, um alle von DBCC CHECKDB gemeldeten Fehler zu beheben.
Wie repariert man eine beschädigte SQL-Datenbank mit ‘DBCC CHECKDB mit REPAIR_REBUILD’?
Der Befehl REPAIR_REBUILD hilft, beschädigte Seiten wiederherzustellen oder fehlende Zeilen in nicht geclusterten Indizes zu reparieren. Sie können damit eine Datenbankreparatur “ohne die Möglichkeit eines Datenverlustes” durchführen.
Bevor Sie den Befehl ‘DBCC CHECKDB REPAIR_REBUILD’ ausführen, stellen Sie sicher, dass Sie die Datenbank in den SINGLE_USER-Modus versetzen, indem Sie den folgenden Befehl ausführen:
ALTER DATABASE ihr_dbname SET SINGLE_USER |
Dies ist wichtig, weil das Reparieren einer SQL-Datenbank und die Ausführung eines DBCC CHECKDB-Befehls zwei getrennte Vorgänge sind. Außerdem befindet sich eine Datenbank im MULTI-USER-Modus. Um sie zu reparieren, müssen Sie sie in den SINGLE_USER-Modus bringen, damit keine Fehler auftreten.
Sobald die Datenbank in den SINGLE_USER-Modus versetzt wurde, führen Sie den folgenden Befehl aus, um die Datenbank zu reparieren:
DBCC CHECKDB(‘ihr_dbname’, REPAIR_REBUILD) |
Sobald die Datenbank repariert ist, setzen Sie die Datenbank wieder in den MULTI_USER-Modus:
ALTER DATABASE ihr_dbname SET MULTI_USER |
DBCC CHECKDB mit REPAIR_REBUILD Beispiel
Das folgende Beispiel zeigt eine Fehlermeldung, in der empfohlen wird, “repair_rebuild als minimale Reparaturstufe” für die VLDB-Datenbank auszuführen.
Gehen Sie folgendermaßen vor, um den Tabellenfehler zu beheben:
Schritt 1: Öffnen Sie SQL Server Management Studio (SSMS) und führen Sie diesen Befehl aus:
ALTER DATABASE VLDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE; |
Schritt 2: Sobald sich die Datenbank im SINGLE_USER-Modus befindet, klicken Sie mit der rechten Maustaste auf Datenbanken und dann auf Aktualisieren.
Schritt 3: Erweitern Sie nun Datenbanken, indem Sie auf das “+”-Symbol klicken. Sie können sehen, dass “VLDB” im SINGLE_USER-Modus ist.
Schritt 4: Führen Sie nun den folgenden Befehl DBCC CHECKDB repair rebuild aus:
Wenn es keine Fehler gibt, wird die Abfrage erfolgreich ausgeführt. Wenn ja, bringen Sie die Datenbank in den MULTI_USER-Modus.
Was passiert, wenn ‘DBCC CHECKDB REPAIR_REBUILD’ fehlschlägt?
Die Option REPAIR_REBUILD kann nur kleinere Korruptionsfehler beheben. Daher kann es sein, dass sie nicht alle von CHECKDB gemeldeten Fehler beheben kann und zu einem Fehler führt, der “REPAIR_ALLOW_DATA_LOSS als minimale Reparaturebene” empfiehlt, wie Sie in der Abbildung unten sehen können.
Führen Sie den Befehl “DBCC CHECKDB with REPAIR_ALLOW_DATA_LOSS” als letzten Ausweg aus, um die Datenbank zu reparieren, da er das Risiko eines Datenverlusts birgt. Eine bessere Alternative ist die Verwendung eines professionellen SQL repair tool.
Stellar Repair for MS SQL Software kann helfen, alle Arten von SQL-Datenbank Korruption Fehler zu beheben. Es repariert die MDF-Datei der Datenbank und stellt alle Objekte wieder her und hilft Ihnen so, die Datenbank in ihrer ursprünglichen Form ohne Datenverlust wiederherzustellen.
Schlussfolgerung
Wenn bei der Ausführung des Befehls DBCC CHECKDB Konsistenzfehler auftreten, kann die Option REPAIR_REBUILD helfen, die Fehler ohne Datenverlust zu beheben. Es kann jedoch sein, dass damit nicht alle Konsistenzfehler behoben werden können. Möglicherweise müssen Sie DBCC CHECKDB mit REPAIR_ALLOW_DATA_LOSS ausführen, um die Datenbankbeschädigung zu beheben, aber denken Sie daran, dass dies zu Datenverlusten führen kann. Mit Stellar Repair for MS SQL Software können Sie eine stark beschädigte Datenbank zu beheben und wiederherstellen, ohne Änderungen an seiner ursprünglichen Form.