Microsoft SQL-Server: Datenbankreparatur nach Status „Recovery Pending“
In einem Datenbanksystem ist es wichtig, dass stets genügend freier Speicher auf der Datenbankpartition vorhanden ist. Neben einem regelmäßigen Datenbank-Backup ist daher auch das Monitoring des freien Speicherplatzes anzuraten.
Läuft die Datenbankpartition voll, versetzt der Microsoft SQL-Server die Datenbank, die nicht mehr vergrößert werden kann, in den Status „Recovery Pending“. Dies bedeutet, dass SQL die Datenbank nicht öffnen und auch die Datenbank-Dateien nicht sperren kann. Der Zustand kann mit einer Datenbank im Offlinemodus verglichen werden.
Datenbankreparatur nach „Recovery-Pending”-Status in 9 Schritten
Mit den folgenden Schritten lässt sich eine Datenbank (in diesem Beispiel: MX_MSCRM) in vielen Fällen wieder reparieren:
- Vergrößern Sie den freien Speicherplatz.
- Legen Sie Backups der Datenbankdateien *.mdf (Primary Data File), *.ndf (Secondary Data Files, falls vorhanden) und *.ldf (Log Files) an.
- Versetzen Sie die Datenbank in den Modus „Online”:
ALTER DATABASE MX_MSCRM SET ONLINE - Lassen Sie CheckDB über die betroffene Datenbank laufen (nur Warnungen).
DBCC CHECKDB(‚MX_MSCRM‘) WITH NO_INFOMSGS Läuft CheckDB ohne Warnung durch, muss die Datenbank nicht repariert werden. Führen Sie andernfalls Schritt 5 aus. - Versetzen Sie die Datenbank vor der Reparatur in den Einzelbenutzermodus:
ALTER DATABASE MX_MSCRM SET SINGLE_USER - Anschließend gibt es verschiedene Reparaturmodi. Normalerweise beginnt man mit „REPAIR_REBUILD“:
DBCC CHECKDB(‚MX_MSCRM‘,REPAIR_REBUILD) Wenn die Reparatur gelingt, kann die Datenbank wieder in den Mehrbenutzermodus versetzt werden (siehe Schritt 9). - Andernfalls folgt der nächste Reparaturmodus „REPAIR_ALLOW_DATA_LOSS“ (bitte beachten Sie, dass hierbei (wie der Name schon sagt) Daten verloren gehen können):
DBCC CHECKDB(‚MX_MSCRM‘,REPAIR_ALLOW_DATA_LOSS) War die Reparatur erfolgreich, kann die Datenbank in den Mehrbenutzermodus versetzt werden (siehe Punkt 9). - Zuletzt kann man die Reparatur über den „EMERGENCY“-Modus versuchen:
ALTER DATABASE MX_MSCRM SET EMERGENCY
ALTER DATABASE MX_MSCRM SET SINGLE_USER
DBCC CHECKDB (MX_MSCRM,REPAIR_ALLOW_DATA_LOSS) WITH
NO_INFOMSGS,ALL_ERRORMSGS - Versetzen Sie die Datenbank in den Status „Online“ und aktivieren Sie den Mehrbenutzermodus:
ALTER DATABASE MX_MSCRM SET ONLINE
ALTER DATABASE MX_MSCRM SET MULTI_USER Hat alles geklappt, ist nach einem Refresh des Datenbankbaums der Status „Recovery Pending” verschwunden.
Erfahren Sie hier mehr zu den SQL-Datenbanken im Status „Recovery Pending“.