SQL Server-Datenbanken gelangen gelegentlich in den „In Recovery“ Modus, was Datenbankadministratoren oft unvorbereitet trifft. Dieser Status tritt während eines Neustarts, einer Datenbankwiederherstellung oder eines unerwarteten Herunterfahrens auf, während SQL Server unvollständige Transaktionen wiedergibt oder rückgängig macht, um die Datenintegrität zu gewährleisten. Obwohl dieser Prozess typischerweise automatisch erfolgt, kann er manchmal länger als erwartet dauern – oder sogar festgefahren erscheinen – was die Administratoren unsicher macht, wie sie vorgehen sollen.
Wenn Sie auf dieses Problem gestoßen sind, machen Sie sich keine Sorgen. Dieser Artikel hilft Ihnen zu verstehen, was hinter den Kulissen passiert, und lehrt Sie, wie Sie reagieren können. Hier ist ein kurzer Überblick darüber, was Sie lernen werden:
- Was „In Recovery“ Modus bedeutet — Warum Ihre Datenbank in diesen Zustand gerät und was SQL Server im Hintergrund tut.
- Die 3 Phasen der Wiederherstellung — Eine klare Aufschlüsselung der Analyse-, Redo- und Undo-Phasen, die SQL Server während der Wiederherstellung durchläuft.
- Häufige Ursachen für Verzögerungen — Von großen Transaktionsprotokollen bis hin zu übermäßigen virtuellen Protokolldateien (VLFs), sehen Sie, was den Prozess verlangsamen könnte.
- Wie Sie wieder online kommen — Praktische Schritte lernen, um Ihre Datenbank in einen konsistenten Zustand zurückzuversetzen, vom Abwarten bis hin zur Verwendung von SQL-Reparaturwerkzeugen.
- Wann man fortgeschrittene Hilfe suchen sollte — Was zu tun ist, wenn der Wiederherstellungsprozess festgefahren scheint und kein Fortschritt erzielt wird.
Am Ende dieses Leitfadens werden Sie ein solides Verständnis des Wiederherstellungsprozesses von SQL Server und der Werkzeuge haben, die Sie verwenden können, um Ihre Datenbank so schnell wie möglich wieder online zu bringen.
Verstehen des „In Recovery“ Modus in SQL Server
Wenn SQL Server neu startet oder eine Datenbank aus einem Backup wiederhergestellt wird, tritt sie in den „In Recovery“-Modus ein, um die Datenintegrität aufrechtzuerhalten. Während dieser Phase wiederholt oder macht der SQL Server unvollständige Transaktionen rückgängig, um Datenkorruption zu verhindern und die Transaktionskonsistenz sicherzustellen.
Nach dem Neustart des SQL Servers wechselt die Datenbank in den „In Recovery“-Modus. Es kann auch vorkommen, dass die SQL Server-Datenbank beim Start oder bei der Wiederherstellung aus einem Backup im Wiederherstellungsstatus angezeigt wird.
Abbildung 1 – SQL-Datenbank „In Recovery“-Modus
Der Zustand „wird wiederhergestellt“ bedeutet, dass die Datenbank einen Wiederherstellungsprozess durchführt und automatisch online geht, sobald der Prozess abgeschlossen ist. Es kann jedoch vorkommen, dass die Wiederherstellung langsam ist und die Datenbank im Wiederherstellungsstatus hängen bleibt. Ihre Datenbank befindet sich möglicherweise immer noch im Wiederherstellungsstatus, da SQL-Datenbanken drei Phasen der Wiederherstellung durchlaufen, die je nach Größe Ihrer Datenbankdateien Zeit in Anspruch nehmen können.
Die 3 Phasen der SQL-Datenbankwiederherstellung
Normalerweise, wenn die Datenbank beim Neustart des SQL Servers nicht ordnungsgemäß heruntergefahren wird, durchläuft sie eine Crash-Wiederherstellung, um sicherzustellen, dass die Datenbank konsistent bleibt. Es gibt drei Wiederherstellungsphasen, die eine SQL-Datenbank durchlaufen muss:
Phase 1: Analyse
Diese Phase beginnt vom „letzten Checkpoint bis zum Ende des Transaktionsprotokolls.“ Sie erstellt eine ‚Dirty Page Table‘ (DPT), die hilft, alle schmutzigen Seiten zum Zeitpunkt des Absturzes zu bestimmen. Außerdem wird eine ‚Active Transaction Table‘ (ATT) erstellt, um nicht bestätigte Transaktionen zu identifizieren, als der SQL Server gestoppt wurde.
Phase 2: Redo
In dieser Phase rollt der SQL Server alle Änderungen vorwärts, die nach dem Checkpoint und vor dem Absturz passiert sind. Im Wesentlichen müssen in der Redo-Phase alle Transaktionen, die bestätigt wurden, aber noch nicht über den Checkpoint in die SQL-Datendatei (.mdf/.ldf) geschrieben wurden, vorwärts gerollt werden.
Phase 3: Undo
Wenn es zum Zeitpunkt der Datenbankwiederherstellung nicht bestätigte Transaktionen gab, müssen diese in der Undo-Phase zurückgerollt werden, um die DB in einen konsistenten Zustand zu bringen.
Was tun, wenn Ihre Datenbank im Wiederherstellungsmodus feststeckt?
Überprüfen Sie das SQL Server-Protokoll, um die erste Nachricht in der Datenbank zu sehen, die ähnlich aussehen könnte wie:
Datenbank ‚Datenbankname‘ wird gestartet
Das bedeutet, dass die DB-Dateien geöffnet sind und der Wiederherstellungsprozess begonnen hat. Irgendwann später sollten Sie sehen, dass der SQL Server 3 Phasen der Wiederherstellung durchläuft. Wenn Sie Anleitung zur Sicherung und Wiederherstellung Ihrer Datenbank suchen, schauen Sie sich diesen Leitfaden zum Sichern und Wiederherstellen von Azure SQL-Datenbanken an.
Phase 1 der Datenbankwiederherstellung ist unten dargestellt:
Recovery of database ‘DatabaseName’ (9) is 0% complete (approximately 95 seconds remain). Phase 1 of 3. This is an informational message only. No user action is required.
Recovery of database ‘DatabaseName’ (9) is 3% complete (approximately 90 seconds remain). Phase 1 of 3. This is an informational message only. No user action is required.
Nach Abschluss von Phase 1 wird der SQL Server die Phasen 2 und 3 der Wiederherstellung durchlaufen:
Recovery of database ‘DatabaseName’ (9) is 5% complete (approximately 85 seconds remain). Phase 2 of 3. This is an informational message only. No user action is required…
Recovery of database ‘DatabaseName’ (9) is 95% complete (approximately 40 seconds remain). Phase 2 of 3. This is an informational message only. No user action is required.
Phase 3 of 3. This is an informational message only. No user action is required.
Sobald Phase 2 und 3 abgeschlossen sind, sehen Sie etwas Ähnliches wie:
3807 transactions rolled forward in database ‘DatabaseName’ (9). This is an informational message only. No user action is required.
0 transactions rolled back in database ‘DatabaseName’ (9). This is an informational message only. No user action is required.
Recovery is writing a checkpoint in database ‘DatabaseName’ (9). This is an informational message only. No user action is required.
Recovery completed for database DatabaseName (database ID 9) in 30 second(s) (analysis 1289 ms, redo 29343 ms, undo 72 ms.) This is an informational message only. No user action is required.
Im Fehlerprotokoll achten Sie auf die Meldung ‚Keine Benutzeraktion erforderlich‘. Dies deutet darauf hin, dass die Datenbank sich im Wiederherstellungszustand befindet. Die Wiederherstellung kann jedoch länger als erwartet dauern, und die Datenbank wird im Wiederherstellungsmodus stecken bleiben.
Gründe für das Steckenbleiben einer SQL-Datenbank im „In Recovery“-Modus
Die folgenden Gründe können dazu führen, dass eine SQL-Datenbank im Wiederherstellungsmodus stecken bleibt:
- Eine lang laufende Transaktion wird zurückgerollt
- Die Größe der Transaktionsprotokolldatei ist riesig
- Zu viele virtuelle Protokolldateien (VLFs) befinden sich im DB-Transaktionsprotokoll
- Es gab einen Fehler im SQL Server, der nun behoben ist.
Was können Sie tun, um die Datenbank in einen konsistenten Zustand zurückzubringen?
Workaround 1: Warten Sie, bis die Datenbankwiederherstellung abgeschlossen ist
Die offensichtlichste Lösung, um die Datenbank wieder online zu bringen, ist Geduld zu haben und auf den Abschluss des Wiederherstellungsprozesses zu warten; dies kann Stunden oder Tage dauern. Wenn die Wiederherstellung für eine DB in einem SQL Server 2008 oder 2008 R2 länger als erwartet dauert, können das Anwenden von Microsoft Fixes hilfreich sein.
Hinweis: Vermeiden Sie es, den RESTORE-Befehl auszuführen, um die Datenbank online in einem konsistenten Zustand zu bringen, da der SQL Server bereits versucht, dieselbe Aufgabe auszuführen. Das Ausführen von ‚RESTORE with..Recovery‘ bedeutet, dass die Datenbank erneut durch dieselben Schritte gehen muss.
Workaround 2: Verwenden Sie ein professionelles SQL-Datenbankreparatur-Tool
Wenn die Wiederherstellung abgeschlossen ist, aber es nicht gelingt, die Datenbank in einen konsistenten Zustand zu bringen, kann die Verwendung eines spezialisierten SQL-Reparaturtools helfen, die Datenbank in ihren ursprünglichen Zustand zu versetzen.
- Stellar Repair für MS SQL – Ein spezialisiertes Tool, das dabei hilft, SQL-Datenbanken nach Korruption oder Ausfall in ihren ursprünglichen Zustand wiederherzustellen.
- ApexSQL Recover – Dieses Tool hilft bei der Wiederherstellung gelöschter, abgeschnittener oder korrupter SQL Server-Datenbankdaten.
- dbForge SQL Complete – Obwohl primär eine IDE-Erweiterung, bietet es nützliche Funktionen zur Fehlerbehandlung und Fehlerbehebung.
- Redgate SQL Data Recovery – Redgate bietet eine Reihe von SQL Server-Tools, einschließlich Datenwiederherstellungsfunktionen.
- SysTools SQL Recovery Tool – Bekannt für die Wiederherstellung von korrupten oder beschädigten SQL-Datenbankdateien (.MDF und .NDF) und deren Wiederherstellung in einen verwendbaren Zustand.
- Kernel für SQL-Datenbankwiederherstellung – Dieses Tool kann SQL Server-Datenbanken sowohl von Korruption als auch von unerwarteten Abschaltungen wiederherstellen und wiederherstellen.
- Aryson SQL Database Recovery – Ein weiteres Tool, das MDF- und NDF-Dateien in SQL Server reparieren und wiederherstellen kann.
Zusammenfassung
In diesem Artikel haben wir behandelt, was es bedeutet, wenn eine SQL-Datenbank im ‚In Recovery‘-Modus feststeckt, die drei kritischen Phasen der Wiederherstellung (Analyse, Redo und Undo) und was Sie tun können, um die Datenbank wieder online zu bringen. Wir haben auch mögliche Ursachen besprochen, von großen Transaktionsprotokollen bis hin zu zu vielen virtuellen Protokolldateien (VLFs).
Wenn Ihre SQL-Datenbank weiterhin im Wiederherstellungsmodus feststeckt, denken Sie daran, dass Geduld der Schlüssel ist. Vermeiden Sie es, einen RESTORE-Befehl auszuführen, da dies den Wiederherstellungsprozess neu startet. Bei schwerwiegenden Problemen, bei denen manuelle Eingriffe fehlschlagen, sollten Sie in Betracht ziehen, ein professionelles SQL-Datenbank-Reparaturtool zu verwenden, um Ihre Daten wiederherzustellen.
Wenn Sie diesen Leitfaden hilfreich fanden, teilen Sie ihn mit Ihrem Team oder hinterlassen Sie einen Kommentar zu Ihren SQL-Wiederherstellungserfahrungen.
Source:
https://dzone.com/articles/resolving-sql-database-stuck-in-recovery-mode