Wie kann ich Daten aus der LDF-Datei wiederherstellen?


9

Wir verwenden SQL 2005 Express Edition. Wir möchten die Daten aus der LDF-Datei lesen, um einige gelöschte Datensätze wiederherzustellen.

Wir haben versucht, eine Testversion von ApexSQL zu verwenden, die uns sehr geholfen hat. Anstatt Software von Drittanbietern zu verwenden, versuchen wir herauszufinden, wie die Protokolldatei selbst gelesen werden kann.

Wie können wir Daten aus der LDF-Datei lesen und wiederherstellen?


Verwendet die Datenbank das vollständige Wiederherstellungsmodell oder ist sie einfach?
MartinC

Ja, wir verwenden Full Recovery Model
goofyui

Wir können Daten mit der ApexSQL-Testversion wiederherstellen. In der Testversion können nur die Daten angezeigt werden. Wir haben kein Budget, um eine Vollversion zu kaufen, und versuchen daher, es selbst herauszufinden, um die Daten aus der .ldf-Datei
wiederherzustellen

Antworten:


11

Sie benötigen eine vorherige vollständige Sicherung und alle Protokollsicherungen, die seit der letzten vollständigen Sicherung erstellt wurden

1) Machen Sie einen Abschluss der Protokollsicherung

BACKUP LOG OldDB TO DISK='C:\OldDB_Tail.trn' WITH NO_TRUNCATE

2) Transaktion für gelöschte Datensätze suchen (Operation ist LOP_DELETE_ROWS für DELETEs und LOP_SET_BITS & LOP_MODIFY_ROW für eine TRUNCATE TABLE)

SELECT * FROM fn_dblog(NULL,NULL) WHERE AllocUnitName = 'dbo.YourTableName'

3) Stellen Sie die vorherige vollständige Sicherung wieder her und protokollieren Sie die Sicherungen sowie den Endpunkt in einer neuen Datenbank MIT NORECOVERY und STOPAT = 'Kurz vor Beginn der Transaktion'.

RESTORE DATABASE NewDB
FROM DISK='C:\Previous_Full_Backup_Of_OldDB.bak'
WITH NORECOVERY,
STOPAT='2012/01/11 11:35AM',
MOVE 'OldDB' TO 'C:\DATABASES\NewDB.mdf',
MOVE 'OldDB_Log' TO 'C:\DATABASES\NewDB.ldf'

RESTORE LOG NewDB
FROM DISK='C:\Previous_TranLog_Backup_Of_OldDB.trn'
WITH NORECOVERY,
STOPAT='2012/01/11 11:35AM'

RESTORE LOG NewDB
FROM DISK='C:\OldDB_Tail.trn'
WITH NORECOVERY,
STOPAT='2012/01/11 11:35AM'

-- This recovers the restored database and allows access
RESTORE DATABASE NewDB WITH RECOVERY

In diesem Blog- Beitrag wird detaillierter beschrieben, wie Sie mithilfe von fn_dblog die Zeit zum STOPATEN finden. In diesem Blog- Beitrag wird versucht, Daten direkt aus dem Protokoll wiederherzustellen. Dies kann jedoch im Vergleich zu einem Zeitpunkt der Wiederherstellung sehr zeitaufwändig sein.

Auch dieser Blog- Beitrag von Robert L Davis enthält ein Beispiel für die Kombination von STOP und STANDBY, damit Sie den Status der Datenbanken zu verschiedenen Zeitpunkten abfragen können.


Was ist mit "Datensätze abschneiden"? Ich nehme an, einige von ihnen sind auch abgeschnitten .. !!
Goofyui

1) Wie man .trn aus meiner alten Datenbank nimmt. Ich habe .ldf, .mdf !! Ich habe keine Transaktionsprotokolldatei.
Goofyui

Die Idee hier ist, die Datenbank bis zu dem Punkt wiederherzustellen, an dem die Daten verloren gegangen sind, und dann können Sie eine Kopie der verlorenen Daten erstellen. Der Befehl BACKUP LOG erstellt die trn-Datei aus dem aktiven Teil des Transaktionsprotokolls (ldf)
MartinC

Ich finde es schwierig, Ihren Standpunkt vollständig zu verstehen. Können Sie bitte die Syntax für das Fortfahren teilen .. wie es als OldDB behalten, wo Unfall passiert ist und NewDB, in der die OldDB-Protokolldatei wiederhergestellt werden soll ..
goofyui

1
Ich habe einige weitere Details und Links zu Blogs hinzugefügt, um den Zeitpunkt für die Wiederherstellung zu ermitteln, sowie ein weiteres Blog zur Verwendung der Ausgabe des fn_dblog zum Wiederherstellen gelöschter Zeilen.
MartinC
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.