Você precisará de um backup completo anterior e de todos os backups de log realizados desde o último backup completo
1) Siga o backup do log
BACKUP LOG OldDB TO DISK='C:\OldDB_Tail.trn' WITH NO_TRUNCATE
2) Localizar transação para registros excluídos (a operação será LOP_DELETE_ROWS para DELETEs e LOP_SET_BITS & LOP_MODIFY_ROW para uma TABELA DE TRUNCATE)
SELECT * FROM fn_dblog(NULL,NULL) WHERE AllocUnitName = 'dbo.YourTableName'
3) Restaurar backups completos anteriores e de log anteriores, além da cauda para um novo banco de dados WITH NORECOVERY e STOPAT = 'Pouco antes do horário de início da transação'
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 postagem do blog aborda com mais detalhes a hora de PARAR usando o fn_dblog. Esta postagem do blog tenta recuperar dados diretamente do log, mas isso pode levar muito tempo, em comparação com um ponto no tempo de recuperação.
Também este blogue mensagem por Robert L Davis tem um exemplo na combinação de STOP e STANDBY para que você possa consultar o estado dos bancos de dados em diferentes pontos no tempo.