Eu tenho um banco de dados no standby
modo.
-- STEP 1
-- Restore path F1 > T7
RESTORE DATABASE [TestRestore] FROM DISK = N'C:\Temp\F1.BAK' WITH FILE = 1,
NORECOVERY, NOUNLOAD, REPLACE, STATS = 5
GO
-- STEP 1
RESTORE LOG [TestRestore] FROM DISK = N'C:\Temp\T7.TRN' WITH FILE = 1,
STANDBY = N'C:\Temp\TestRestore_RollbackUndoFile.tuf', NOUNLOAD, STATS = 5
GO
E agora eu vou fazer o envio de log. Meu banco de dados é acessível ( read only
) então será fácil determinar um ponto específico no tempo em que preciso parar.
-- STEP 3
-- Restore T8
USE [master]
RESTORE LOG [TestRestore] FROM DISK = N'C:\Temp\T8.TRN' WITH FILE = 1,
STANDBY = N'C:\Temp\TestRestore_RollbackUndoFile.tuf',
NOUNLOAD, STATS = 10, STOPAT = N'2013-10-25T19:55:26'
GO
-- STEP 4
-- ckecking
SELECT * FROM TestRestore.dbo.TranRecord
GO
Posso executar a mesma restauração do log de transações repetidamente até chegar ao ponto no tempo necessário, incrementando o tempo especificado na STOPAT
cláusula.
Mas, por exemplo, eu preciso repagar toda a restauração novamente caso eu tenha percebido que restaurei muito antes? (Quero dizer, excluir a restauração atual db
e restaurar F1 > T7 > T8
novamente e parar exatamente onde eu preciso). Ou é possível desfazer apenas o último envio de log ?(no meu exemplo é STEP 3
).
Msdn dá uma conotação bastante controversa.
Especifica um arquivo em espera que permite que os efeitos de recuperação sejam desfeitos.
Você deve reiniciar a sequência de restauração.
Acredito que o SQL Server poderia teoricamente permitir retroceder no tempo porque os logs contêm informações de desfazer e refazer. Mas isso não é implementado ou não é possível por algum motivo.