SQL Server: Datenbank mit beschädigter oder verlorener Log-Datei wiederherstellen

Eine verlorene oder beschädigte SQL Server Log-Datei (.ldf) ist einer der gefürchtetsten Notfälle für Datenbankadministratoren. Dieser Leitfaden zeigt Schritt für Schritt, wie man eine Datenbank in einem solchen Szenario wiederherstellen kann – ohne Datenverlust, wenn möglich.

Symptome und Diagnose

-- Datenbankstatus prüfen
SELECT name, state_desc, log_reuse_wait_desc
FROM sys.databases
WHERE name = 'MyDatabase';

-- Wenn Status = SUSPECT: Log-Problem bestätigt

Methode 1: Emergency-Modus mit DBCC CHECKDB

-- Datenbank in Emergency-Modus setzen
ALTER DATABASE MyDatabase SET EMERGENCY;

-- Single-User-Modus aktivieren
ALTER DATABASE MyDatabase SET SINGLE_USER;

-- DBCC CHECKDB mit Repair (Datenverlust möglich!)
DBCC CHECKDB (MyDatabase, REPAIR_ALLOW_DATA_LOSS);

-- Datenbank wieder online bringen
ALTER DATABASE MyDatabase SET ONLINE;
ALTER DATABASE MyDatabase SET MULTI_USER;

Methode 2: Neue Log-Datei erstellen

-- Nur wenn kein aktuelles Backup verfügbar
-- ACHTUNG: Möglicher Datenverlust bei uncommitted transactions

ALTER DATABASE MyDatabase SET EMERGENCY;
ALTER DATABASE MyDatabase SET SINGLE_USER
  WITH ROLLBACK IMMEDIATE;

-- Datenbankdateien neu anfügen ohne Log
EXEC sp_detach_db 'MyDatabase', 'true';

-- Neu anhängen: Nur .mdf angeben (kein .ldf)
CREATE DATABASE MyDatabase ON
  (FILENAME = 'C:DataMyDatabase.mdf')
FOR ATTACH_REBUILD_LOG;

Prävention: Immer Backups prüfen

Nach der Wiederherstellung: Sofort ein vollständiges Backup erstellen und eine regelmäßige Backup-Strategie implementieren. SQL Server Agent Jobs für tägliche Full Backups und stündliche Log Backups sind Standard-Best-Practice für Produktionsdatenbanken.