Angenommen, ich habe eine Datenbank mit einer Single .mdf
und einer .ldf
Datei.
Die Datenbank ist getrennt, es gibt keine Transaktionen und SQL Server wird gestoppt.
Ich gehe davon aus, dass alle Daten bereits in der .mdf
Datei sind?
Die .ldf
Datei ist im Wesentlichen leer? Wenn die .ldf
Datei nicht leer ist, was enthält sie?
Wenn ich die .ldf
Datei lösche und manuell eine neue 0 Byte lange .ldf
Datei mit demselben Namen wie zuvor erstelle , kann ich die Datenbank ohne Datenverlust erneut anhängen?
sql-server
sql-server-2008-r2
Eduard
quelle
quelle
.ldf
Protokolldatei und Erstellen einer neuen), und sehen Sie, was passiert. Wenn Sie das getan haben, kommen Sie bitte zurück, teilen Sie uns mit, was Sie gefunden haben, und markieren Sie oder @ antworten Sie mir. Vielen Dank.Antworten:
(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.)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).
SIMPLE
Wiederherstellung: Die Protokolldatei enthält die Protokolldatensätze, die die Ereignisse beschreibenCHECKPOINT
, die vor dem Herunterfahren der Datenbank aufgetreten sind. (ACHECKPOINT
löscht auch das Protokoll in diesem Modus.)BULK_LOGGED
undFULL
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
.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 unwichtigeCHECKPOINT
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
.quelle
CHECKPOINT
immer schmutzige Datenseiten auf die Festplatte, unabhängig vom Wiederherstellungsmodell. Bei derSIMPLE
WiederherstellungCHECKPOINT
löscht a auch das Protokoll. Eine vollständige Sicherung enthält alle Datenbereiche und den erforderlichen Teil des Protokolls, um die Daten in der Sicherung zum Zeitpunkt des Abschlusses des Datenleseteils (alle Wiederherstellungsmodelle) transaktionskonsistent zu machen. Richtig, eine Protokollsicherung bei derSIMPLE
Wiederherstellung ist nicht möglich.Es hört sich so an, als ob Ihnen die Bedeutung historischer Transaktionsprotokolle fehlt.
Wenn Sie einen Datensatz mit dem Wert X haben, der auf den Wert Y geändert wird, wird diese Änderung im Transaktionsprotokoll aufgezeichnet. Wenn Sie einfach Ihre Datendatei sichern und die Protokolle leeren, haben Sie den ursprünglichen Wert von X für immer verloren, da jetzt nur noch ein Datensatz von Y vorhanden ist. In der Transaktionsprotokolldatei können Sie diese Änderung bei Bedarf zurücksetzen.
Das Transaktionsprotokoll ist eine Aufzeichnung darüber, wie Sie den aktuellen Inhalt der Datendatei erstellt haben, und ermöglicht Ihnen das Zurücksetzen auf einen beliebigen Zeitpunkt und nicht nur auf die spezifischen Intervalle, in denen Sie Ihre Datendatei gesichert haben.
Es gibt Fälle, in denen dies wichtig ist. Zum Beispiel Transaktionsdatenbanken, die eine E-Commerce-Site betreiben. Möglicherweise möchten Sie Sicherungen des Transaktionsprotokolls beibehalten, auch wenn Sie die tatsächlichen Datendateien gesichert haben.
Es gibt Fälle, in denen dies nicht so wichtig ist, z. B. Staging-Tabellen für ein Data Warehouse, in denen die "Rohdaten" einfach aus der Quelle geladen werden können, um neu zu beginnen.
quelle
Die .LDF-Datei muss nicht unbedingt leer sein. Abhängig von mehreren Faktoren (einschließlich des Wiederherstellungsmodells Ihrer Datenbank, des Prüfpunktintervalls, unabhängig davon, ob Optionen wie Replikation oder CDC aktiviert sind) kann es durchaus Transaktionen in Ihrem Protokoll geben, die entweder angewendet oder zurückgesetzt werden müssen.
Sie könnten sicherlich das tun, was Sie verlangen, und die LDF-Datei löschen. Sie haben jedoch die Möglichkeit, die Transaktion zu verlieren oder eine beschädigte Datenbank zu erhalten. Tun Sie dies also auf eigenes Risiko.
quelle