Determina o LSN do banco de dados no modo NORECOVERY

3

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á.

    
por Clyde 02.06.2011 / 17:50

5 respostas

3

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 ...

    
por 02.06.2011 / 18:27
3

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
    
por 10.02.2013 / 14:56
0

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>     

por 02.06.2011 / 18:03
0

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.

    
por 10.02.2013 / 16:48
0

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.

    
por 02.06.2011 / 18:14