Tenho vários arquivos: dois backups e uma lista de logs de transações.
Os backups são chamados:
- FB20241125_233033.bak
- FB20241126_233040.bak
(Os nomes dos arquivos correspondem à data/hora em que os backups foram feitos.)
Os logs de transações são chamados (trecho da linha de comando):
Prompt>dir *.trn
Directory of C:\...\Transaction_Logs
25/11/2024 23:45 5.758.464 20241125224500.trn
26/11/2024 00:00 5.560.832 20241125230001.trn
26/11/2024 00:15 5.692.928 20241125231501.trn
...
26/11/2024 15:00 5.822.976 20241126140001.trn
26/11/2024 15:15 5.955.072 20241126141501.trn
26/11/2024 15:30 5.889.536 20241126143000.trn
27/11/2024 12:15 5.626.368 20241127111501.trn
(O mesmo motivo para nomes de arquivos se aplica.)
Então eu faço uma restauração deste diretório (pego os dois arquivos de backup e todos os arquivos de log de transações), usando as seguintes propriedades:
Esta é a mensagem de erro que recebo:
System.Data.SqlClient.SqlError: O log neste conjunto de backup começa em LSN 33845000000619000001, que é muito recente para ser aplicado ao banco de dados. Um backup de log anterior que inclui LSN 33816000000750400001 pode ser restaurado. (Microsoft.SqlServer.SmoExtended)
Pensei comigo mesmo " Mas isso é óbvio: meu último backup foi feito às 23h30m40s em 26/11/2024, enquanto o último log de transações data do dia seguinte, então não vamos incluir esse log de transações na restauração. ", mas isso não ajuda.
Alguém sabe o que posso fazer para restaurar o backup mais recente possível, contendo os logs de transações mais recentes possíveis?
Edit1: e quanto aos LSNs em arquivos "*.trn"?
Enquanto isso, executei a seguinte consulta SQL para os *.trn
arquivos mencionados:
RESTORE HEADERONLY FROM DISK = 'C:\...\20241125224500.trn';
RESTORE HEADERONLY FROM DISK = 'C:\...\20241125230001.trn';
...
Estes são os primeiros resultados:
FirstLSN LastLSN
---------------------- --------------------
33758000001254200001 33759000000515900001
33759000000515900001 33759000001579300001
33759000001579300001 33760000000835100001
33760000000835100001 33761000000090800001
33761000000090800001 33761000001176400001
33761000001176400001 33762000000412500001
33762000000412500001 33762000001492100001
33762000001492100001 33763000000648100001
33763000000648100001 33763000001722200001
Como você pode ver, há muitos *.trn
arquivos tendo 3375...
e 3376...
como primeiro Número de Sequência de Log (LSN), então por que a mensagem de erro está dizendo que o log neste conjunto de backup começa em LSN 3384...
?
desde já, obrigado
Tudo o que a GUI faz é criar um monte de comandos T-SQL para você. O diálogo de restauração, em particular, é uma fera muito difícil de entender. Quando ensino, consigo explicar backup e restauração, incluindo os comandos, em cerca de 30 minutos, e então passo 3 horas explicando o que as nuances neste diálogo fazem.
Ou seja, é uma boa ideia poder trabalhar independentemente da GUI, quando ela não faz o que você quer, a complexidade da GUI é muito alta, é incompreensível ou quando há bugs desagradáveis na GUI.
Então, você pode usar o botão Script para criar scripts para os comandos RESTORE gerados pelo SSMS e trabalhar esses comandos RESTORE para corresponder aos arquivos que você tem e quais deles você deseja restaurar.
No meu exemplo, e na forma como usei o diálogo de restauração, os comandos de script saíram como abaixo. (Observe que o SSMS adiciona algum lixo ao comando de backup, o que é irrelevante, não é operacional e não deveria estar lá. Mas é improvável que mude.)
Espero que não esteja faltando um arquivo de backup de log "no meio", já que o anterior ao que está faltando seria o último que você poderia restaurar.