Fala Pessoal,
Nesse post quero compartilhar com vocês um caso interessante do dia a dia sobre um erro ao tentar fazer o RESTORE de um Backup de LOG de uma database.
Nesse ambiente, o Backup FULL (“F”) é executado todos os dias às 01:00 horas e os Backup de LOG (“L1 e L2”) a cada 10 minutos o dia inteiro.
Primeiramente, restaurei o Backup FULL (“F”) e depois tentei restaurar o Backup de LOG das 01:10 horas (“L2”). Contudo, foi exibido o erro abaixo:
Msg 4305, Level 16, State 1, Line 42
The log in this backup set begins at LSN 2373000000028900001, which is too recent to apply to the database. An earlier log backup that includes LSN 2373000000028100001 can be restored.
Msg 3013, Level 16, State 1, Line 42
RESTORE LOG is terminating abnormally.
Agora vamos nos aprofundar um pouco mais no problema para depois conseguir explicar o motivo do erro e como resolvê-lo. #gogogo
LSN (Log Sequence Number)
Cada registro do log de transações é identificado de forma exclusiva por um LSN (Log Sequence Number). Os LSNs são ordenados de tal modo que se LSN2 for maior do que LSN1, a alteração descrita pelo registro de log mencionado por LSN2 ocorreu depois da alteração descrita pelo registro de log LSN1.
Criei a imagem abaixo para facilitar o entendimento do LSN dos Backups do nosso problema.
OBS: A seguir vou referenciar o LSN apenas com os três números sinalizados na sequência para facilitar o entendimento também.
Quando restaurei o Backup FULL (“F”) o último LSN utilizado foi o “281”. Ao tentar restaurar o Backup de Log (“L2”) o SQL Server gerou um erro, pois ele inicia com o LSN “289”. Repare que temos uma diferença entre o “281” e o “289”. Observe também que essa diferença está contida no Backup de Log (“L1”). Nesse caso, o problema foi gerado porque o Backup Full (“F”) e o Backup de Log (“L1”) foram executados simultaneamente (ambos iniciaram às 01:00 horas – coluna “backup_start_date”).
Portanto, para fazer o RESTORE vamos precisar restaurar o Backup Full (“F”), depois o Backup de Log (“L1”) e por fim o Backup de Log (“L2”). Dessa forma, conseguimos seguir o LSN corretamente sem deixar nenhum “GAP” na sequência. Com isso, o SQL Server não gerou mais o erro do início do post e o problema foi resolvido.
Resumindo:
Quando encontrar algum erro relacionado ao LSN dos Backups, verifique e entenda a sequência para conseguir fazer o RESTORE corretamente.
A query abaixo retorna o Histórico dos Backups e pode te ajudar a obter essas informações. Ela é muito útil e uso bastante no meu dia a dia como DBA. Recomendo que salve esse script em algum lugar de fácil acesso para que você possa utilizar depois também. Fica a dica!!!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
-------------------------------------------------------------------------------------------------------------------------------- -- Query para conferir o histórico de Backups que foram executados -------------------------------------------------------------------------------------------------------------------------------- SELECT database_name, name, backup_start_date, backup_finish_date, datediff(mi, backup_start_date, backup_finish_date) [tempo (min)], position, first_lsn, last_lsn, server_name, recovery_model, isnull(logical_device_name, ' ') logical_device_name, device_type, type, cast(backup_size/1024/1024 as numeric(15,2)) [Tamanho (MB)], B.is_copy_only FROM msdb.dbo.backupset B INNER JOIN msdb.dbo.backupmediafamily BF ON B.media_set_id = BF.media_set_id where backup_start_date >= dateadd(hh, -24 ,getdate()) and type in ('D','I','L') -- and database_name = 'NomeDatabase' order by backup_start_date desc /* Referência: https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-backup-devices-transact-sql Coluna: device_type 2 = Disk 3 = Diskette (obsolete) 5 = Tape 6 = Pipe (obsolete) 7 = Virtual device (for optional use by third-party backup vendors) OBS: Typically, only Disk (2) and Virtual device (7) are used. */ |
Segue um exemplo do resultado da query:
Observação:
Na maioria das vezes a coluna “device_type” contêm os seguintes valores:
2 – Arquivo gerado em disco.
7 – Arquivo gerado por alguma Ferramenta de Backup.
Download “Script Histórico de Backup”:
Segue o link para baixar o script utilizado nesse Post:
Referências:
Segue abaixo alguns links como referência:
Espero que tenha gostado e que isso também possa ser útil no seu dia a dia. Até o próximo post!
Me siga no LinkedIn e YouTube para ficar por dentro das novidades.
Abraço,
Luiz Vitor França Lima
Consultor SQL Server
Mais uma ótima dica, obrigado por compartilhar Luiz, já passei pelo mesmo problema e foi bem chato até aprender o que era hahaha. Com certeza vai ajudar muita gente que trabalha com restore de log ou tenha que começar a fazer.
Fala Tássio,
Rapaz, isso é meio chato de descobrir mesmo, mas depois que aprende fica mais fácil kkk. Esse caso específico estava em uma rotina que faz o RESTORE autómatico e estava falhando. Depois da correção ela voltou a executar normalmente. Acabei gostando do problema e resolvi compartilhar pra tentar ajudar mais alguém mesmo =)
Abraço.
Luiz Vitor
No meu caso estou fazendo um Livesync e quando ele termina aparecem varias ocorrencias deste erro
“the log in this backup set begins at lsn 175360000007200001 which is too recent to apply to the database. An earlier log backup that include … ”
Como se trata de um sync, na minha visao ele ja faz com o ultimo backup de log, poderia me dar uma dica de como resolver? Ou por onde comeco?