Wir haben eine sehr große Datenbank (~ 6 TB), deren Transaktionsprotokolldatei gelöscht wurde (während SQL Server heruntergefahren wurde. Wir haben versucht:
- Trennen und erneutes Anschließen der Datenbank; und
- Wiederherstellen der Transaktionsprotokolldatei
... aber bisher hat nichts geklappt.
Wir führen derzeit:
ALTER DATABASE <dbname> REBUILD
LOG ON (NAME=<dbname>,FILENAME='<logfilepath>')
... aber angesichts der Größe der Datenbank wird dies wahrscheinlich einige Tage dauern.
Fragen
Gibt es einen Unterschied zwischen dem obigen und dem folgenden Befehl?
DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS)
Sollten wir stattdessen ausführen
REPAIR_ALLOW_DATA_LOSS
?
Es ist erwähnenswert, dass die Daten aus anderen Quellen stammen, damit die Datenbank wiederhergestellt werden kann. Wir vermuten jedoch, dass die Reparatur der Datenbank viel schneller geht als das erneute Einfügen aller Daten.
Aktualisieren
Für diejenigen, die Punkte halten: Der ALTER DATABASE/REBUILD LOG
Befehl wurde nach ungefähr 36 Stunden ausgeführt und es wurde berichtet:
Warnung: Das Protokoll für die Datenbank 'Datenbankname' wurde neu erstellt. Transaktionskonsistenz ist verloren gegangen. Die RESTORE-Kette wurde unterbrochen, und der Server verfügt nicht mehr über einen Kontext zu den vorherigen Protokolldateien. Daher müssen Sie wissen, um welche es sich handelt.
Sie sollten DBCC CHECKDB ausführen, um die physische Konsistenz zu überprüfen. Die Datenbank wurde in den Nur-Dbo-Modus versetzt. Wenn Sie bereit sind, die Datenbank für die Verwendung bereitzustellen, müssen Sie die Datenbankoptionen zurücksetzen und alle zusätzlichen Protokolldateien löschen.
Wir liefen dann eine DBCC CHECKDB
(dauerte ca. 13 Stunden), die erfolgreich war. Angenommen, wir alle haben die Bedeutung von Datenbanksicherungen (und das Gewähren des Zugriffs auf den Server durch Projektmanager ...) erkannt.