Como posso recuperar dados do arquivo LDF?

9

Estamos usando o SQL 2005 Express Edition. Queremos ler os dados do arquivo LDF para restaurar alguns registros excluídos.

Tentamos usar uma versão de teste do ApexSQL que nos ajudou muito. Em vez de procurar software de terceiros, estamos tentando descobrir como ler o arquivo de log.

Como podemos ler e recuperar dados do arquivo LDF?

goofyui
fonte
O banco de dados está usando o modelo de recuperação completa ou é simples?
Martinc
Sim, usamos completa modelo de recuperação
goofyui
Podemos recuperar dados usando a versão de teste do ApexSQL. A versão de teste permite apenas visualizar os dados. Nós não temos orçamento para comprar uma edição completa e assim tentar descobrir isso por nós mesmos para recuperar os dados do arquivo .ldf
goofyui

Respostas:

11

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.

MartinC
fonte
Que tal Truncar Registros? Eu suponho que alguns deles também estão truncados .. !!
goofyui
1) Como tirar .trn do meu banco de dados antigo. Eu tenho .ldf, .mdf !! Eu não tenho arquivo de log de transações.
goofyui
A idéia aqui é recuperar o banco de dados até o ponto anterior à perda dos dados e, em seguida, você poderá fazer uma cópia dos dados perdidos. O comando BACKUP LOG é o que cria o arquivo trn a partir da parte ativa do log de transações (ldf)
MartinC
Acho difícil entender completamente o seu ponto de vista. Você pode por favor partilhe a sintaxe para prosseguir .. como mantê-lo como olddb onde acidente aconteceu e NewDB ao qual o arquivo de log olddb vai ser restaurado ..
goofyui
11
Adicionei mais detalhes e links para blogs para encontrar o momento a ser recuperado e outro blog sobre o uso da saída do fn_dblog para regenerar linhas excluídas.
Martinc