Necesitará una copia de seguridad completa anterior y cualquier copia de seguridad de registro tomada desde la última copia de seguridad completa
1) Tome una cola de la copia de seguridad del registro
BACKUP LOG OldDB TO DISK='C:\OldDB_Tail.trn' WITH NO_TRUNCATE
2) Buscar transacción para registros eliminados (la operación será LOP_DELETE_ROWS para DELETEs y LOP_SET_BITS y LOP_MODIFY_ROW para una TABLA TRUNCATE)
SELECT * FROM fn_dblog(NULL,NULL) WHERE AllocUnitName = 'dbo.YourTableName'
3) Restaurar copias de respaldo completas anteriores y de registro más la cola a una nueva base de datos CON NORECOVERY y STOPAT = 'Justo antes de la hora de inicio de la transacción'
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
Esta publicación de blog cubre con más detalle la búsqueda del tiempo para PARAR usando fn_dblog. Esta publicación de blog intenta recuperar datos directamente del registro, pero esto puede llevar mucho tiempo en comparación con un punto en el tiempo de recuperación.
También esta publicación de blog de Robert L Davis tiene un ejemplo sobre la combinación de STOP y STANDBY para permitirle consultar el estado de las bases de datos en diferentes momentos.