(Haftungsausschluss für Peeps, die von Google einfliegen: Ich empfehle nicht , die in dieser Frage beschriebene Methode zu verwenden, um Speicherplatz für Protokolldateien zurückzugewinnen. Verwenden Sie DBCC SHRINKFILE
stattdessen.)
Ich gehe davon aus, dass sich alle Daten bereits in der MDF-Datei befinden.
Ja, durch das Trennen wird ein CHECKPOINT
in der Datenbank initiiert , sodass alle fehlerhaften Datenseiten auf die Festplatte gelangen.
Eine Datenbank kann nicht getrennt werden , wenn das Transaktionsprotokoll von einem anderen Prozess benötigt wird (Spiegelung, Replikation usw.) oder wenn kein exklusiver Zugriff möglich ist (alle offenen Transaktionen in der Datenbank müssen festgeschrieben oder zurückgesetzt werden). Daher enthält das Protokoll niemals Transaktionen während des Flugs, wie Sie möglicherweise sehen, wenn die Stromversorgung plötzlich ausgeschaltet wird (dh ein Absturz).
Die .ldf-Datei ist im Wesentlichen leer? Wenn die .ldf-Datei nicht leer ist, was enthält sie?
SIMPLE
Wiederherstellung: Die Protokolldatei enthält die Protokolldatensätze, die die Ereignisse beschreiben CHECKPOINT
, die vor dem Herunterfahren der Datenbank aufgetreten sind. (A CHECKPOINT
löscht auch das Protokoll in diesem Modus.)
BULK_LOGGED
und FULL
Wiederherstellung: Die Protokolldatei enthält alle Protokolldatensätze, die noch nicht gelöscht wurden. (Der einzige Prozess, der das Protokoll in diesem Modus löscht, ist eine Protokollsicherung.)
Tipp: Protokolldatensätze in der Protokolldatei können mit dem undokumentierten TVF überprüft werden sys.fn_dblog
.
Wenn ich die .ldf-Datei lösche und manuell eine neue .ldf lange .ldf-Datei mit demselben Namen wie zuvor erstelle, kann ich die Datenbank ohne Datenverlust erneut anhängen?
Dadurch werden die Datei-Header-Informationen zerstört und die Protokolldatei beschädigt.
Damit die Datenbank angehängt werden kann, müssen Sie die Protokolldatei entfernen / umbenennen und die Datenbank anhängen ATTACH_REBUILD_LOG
, damit SQL Server am Standardspeicherort eine neue Protokolldatei von Grund auf neu erstellt.
Vorausgesetzt, Sie haben das getan,
Bei der SIMPLE
Wiederherstellung gehen keine Benutzerdaten verloren, da nur relativ unwichtige CHECKPOINT
Protokolldatensätze verschwunden sind .
In den anderen Wiederherstellungsmodellen würde dies die Protokollsicherungskette unterbrechen, und offensichtlich konnten alle gelöschten Protokolldatensätze nicht mehr gesichert werden (und waren wahrscheinlich noch nicht gesichert). Dies hat offensichtliche Auswirkungen, falls die Datenbank wiederhergestellt werden muss.
Also ... technisch gesehen, nein, es würde keinen unmittelbaren Datenverlust geben. Diese Methode ist jedoch sicherlich keine gute Praxis, insbesondere in einem anderen Wiederherstellungsmodell als SIMPLE
.