Algumas colunas lsn estão em sys.master_files que, no nível do servidor
A coluna "redo_start_lsn" pode ser apenas o ticket.
Eu não tentei esta BTW ...
Estou restaurando logs de transações para um banco de dados, mas preciso de uma maneira de saber com qual log de transação devo começar. Normalmente, vejo algo assim:
The log in this backup set terminates at LSN 103000001633300001, which is too early to apply to the database. A more recent log backup that includes LSN 103000002524300001 can be restored.
Então como obtenho o LSN 103000002524300001 programaticamente? O banco de dados está no modo NORECOVERY, portanto, o DBCC LOG não funciona. Eu tenho registros dos logs de transações, então eu sei quais são seus primeiros e últimos LSNs. Eu simplesmente não sei onde o banco de dados atualmente está.
Algumas colunas lsn estão em sys.master_files que, no nível do servidor
A coluna "redo_start_lsn" pode ser apenas o ticket.
Eu não tentei esta BTW ...
Você pode obter essas informações com uma consulta como:
SELECT TOP 1 b.type, b.first_lsn, b.last_lsn, b.checkpoint_lsn, b.database_backup_lsn
FROM msdb..restorehistory a
INNER JOIN msdb..backupset b ON a.backup_set_id = b.backup_set_id
WHERE a.destination_database_name = 'AV_PROD'
ORDER BY restore_date DESC
Não tenho certeza sobre como obter o primeiro / último LSN de um arquivo de log de transações programaticamente, mas você pode simplesmente fazer o script da recuperação para tentar aplicar cada log de transação em ordem - os que são "muito cedo" (já existem no banco de dados) falhará com esse erro. O resto deve aplicar-se de forma limpa.
Espero que alguém tenha uma idéia melhor - eu posso imaginar que ser muito doloroso esperar se você tem muitos logs de transação, já que todo o log provavelmente precisa ser escaneado para determinar quais são os LSNs iniciais e finais. / p>
O fato de você ter um banco de dados no norecovery significa que você já restaurou um backup de algum tipo. Esse backup tem um cabeçalho. Use isso.
RESTORE HEADERONLY
retorna também o FirstLSN
e o LastLSN
do backup como DatabaseBackupLSN
contendo o LSN do último backup completo. Destes você pode recriar a ordem necessária de restauração. Você nunca precisa olhar para o banco de dados LSN, a ordem necessária pode (e deve) sempre ser recriada a partir da própria mídia de backup.