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.