Tive uma situação em que os Backups Nativos estavam sendo feitos em um Servidor.
Acontece que eu vi msdb
que havia uma ferramenta de backup de terceiros ( AppAssure
) que também estava pegando VSS (tipo de) backup to virtual device
.
Em algum intervalo, o AppAssure (backup sendo feito para VIRTUAL DEVICE
) estava fazendo um COPY_ONLY backup
e em algum outro intervalo estava FULL backup
quebrando a cadeia de logs.
Existe alguma maneira ( T-SQL query
) de saber quando uma cadeia de logs de backup está quebrada?
Leitura de referência / Perguntas e respostas semelhantes
Você pode querer verificar minha resposta que postei em resposta à pergunta: Os backups do VSS quebrarão o logchain? (dba.stackexchange.com)
A explicação na minha resposta também está vinculada à pergunta Como posso fazer backup de um banco de dados do SQL Server usando o Backup do Windows Server? (serverfault.com) que também foi respondido por mim.
Cadeia de log de transações
Quando um backup de log de transações (TLOG) é executado, as informações de backup são armazenadas no banco de dados msdb em várias tabelas. As informações armazenadas conterão informações como
backup_type
,logical_device_name
,physical_device_name
,is_copy_only
,is_snapshot
e várias..._lsn
colunas (lsn = número de sequência de log).Você pode recuperar as informações da cadeia de backup do log de transações de sua instância do SQL Server por meio do banco de dados msdb com o seguinte script:
Cuidado: A cláusula where atualmente seleciona o banco de dados AdventureWorks2012
Cadeia de log de transações quebrada
A cadeia de log (transação) nunca é interrompida, a menos que uma das seguintes condições seja atendida:
TRUNCATE_ONLY
Sua situação
Na captura de tela que você forneceu você tem um
FULL
backup do banco de dados que éis_copy_only
e logo após umFULL
backup que nãois_copy_only
é . Agora o que você não sabe:O segundo
FULL
, semis_copy_only
backup, é um instantâneo ou não?Se você usar meu script acima e alterar a
WHERE
cláusula para corresponder ao nome do seu banco de dados, poderá descobrir que esseFULL
backup que não éis_copy_only
pode ser apenas um arquivois_snapshot
.E isso pode abrir uma nova pergunta:
O backup
FULL
deis_snapshot
banco de dados do meu banco de dados interromperá a cadeia de backup de log?Mas...
.... seja qual for o caminho, desde que você tenha uma cadeia ininterrupta de
FULL
backupsTLOG
que possa acessar, você ainda poderá restaurar seu banco de dados para qualquer ponto no tempo, mesmo se tiver outroFULL
backup no meio.Você pode verificar isso com a saída do meu script para seu banco de dados, observando os números
first_lsn
e .last_lsn
Eles devem corresponder, mesmo ao ignorar umFULL
backup.Melhor prevenir do que remediar
Eu tenho um
AdminDB2
banco de dados em uma das minhas instâncias. Criei umTLOG
backup, modifiquei dados, fiz backup, modifiquei dadosFULL
, fizTLOG
backup, ....Vamos dar uma olhada no meu histórico de backup do meu
AdminDB2
:A ordem é decrescente de data
You can see the last
TLOG
backup at the top, the previousFULL
(in-between) backup at2018-04-25 17:28:48.000
, the previousTLOG
backup at2018-04-25 17:28:23.000
, and so on.To restore the
AdminDB2
database to the current point-in-time I would have to use the firstFULL
backup from2018-04-25 17:27:32.000
(because I deleted the in-betweenFULL
backup) together with all theTLOG
backups.Let's give that a try.
FULL
backup fileAdminDB2_FULL_20180425_172848.bak
on my disk (or rename it), just because it is the one in-between.FULL
backupAdminDB2_FULL_20180425_172732.bak
TLOG
backup filesOverwrite the existing database (WITH REPLACE)
Script
Output
...and the database is back ONLINE.
Summary
The backup chain only breaks when you lose the TLOG backups in-between, other than that you can restore a database from a
FULL
backup a long time ago and just add all theTLOG
backups.However...
...it is faster to have a more recent
FULL
,DIFF
andTLOG
backups handy.Additional information in response to comment: Transaction Log backup was performed with the option TRUNCATE_ONLY - when this happens, is there any way to know this by T-SQL query
Backing Up Transaction Log With Truncate_only
In previous versions of SQL Server prior to SQL Server 2008 you could use the following statement:
This has been deprecated and is no longer supported. You will receive an error message like the following:
The new method is to backup to disk
NUL
and is performed with the following command:This will return the following information:
Reference: BACKUP (Transact-SQL) (Microsoft Docs)
Your backup history will show this as:
The information for the
logical_device_name
(ldev
) andphysical_device_name
(pdev
) will both contain the valueNULL
. This is a sign that aBACKUP LOG ...
was performed with aTRUNCATE_ONLY
(new:TO DISK='NUL'
). You will have lost the ability to restore past this point using Transaction Log backups.Additional information in response to comment: Yes - this was a is_snapshot = 1 [backup]
is_snapshot
Please read the section is_snapshot in my answer to the question Use of third-party VSS backup plus native SQL backup
From my original answer:
Espero que esta informação seja suficiente.
De acordo com a documentação do MSDN BACKUP DO LOG DE TRANSAÇÕES e SEQUÊNCIA DE RESTAURAÇÃO: Mitos e verdades Uma sequência contínua de
T-Log
backups é vinculada por umLog Chain
, que começa com um backup COMPLETO. Agora, a menos que executemos qualquer coisa explicitamente que quebre a cadeia de logs (Ex., executando BACKUP log TRUNCATE_ONLY* ou alternando para o modelo de recuperação SIMPLE), a cadeia existente permanece intacta. Com a cadeia de logs intacta, você pode restaurar seu banco de dados a partir de qualquer backup COMPLETO de banco de dados no conjunto de mídia, seguido por todos osT-Log
backups subsequentes até o ponto de falha.E como
MSSQLTIPS
documentos aqui Ao restaurar um banco de dados, a sequência RESTORE inicial do banco de dados deve começar a partir de um backup COMPLETO do banco de dados. Uma sequência RESTORE de banco de dados não pode começar com um backup de arquivo diferencial ou backup de log de transações. Ao restaurar bancos de dados, existem quatro LSNs importantes:FirstLSN
,LastLSN
,CheckpointLSN
eDatabaseBackupLSN
. Esses valores podem ser recuperados de um arquivo de backup do SQL Server usando o comando RESTORE HEADERONLY .Por exemplo
Na captura de tela acima, quero mostrar o cabeçalho "Backup completo" e também o cabeçalho "Backup do log de transações". Se o tipo de backup for 1 , o que significa que é uma parte do cabeçalho do backup completo. E se houver 2 , isso significa que é o cabeçalho de backup do log de transações.
Nesta captura de tela, quero mostrar primeiro
Restore Headeronly
.. para Backup completo, em seguida, backup do log de transações e novamente backup completo do mesmo banco de dados.Nota: Aqui eu destaquei alguma parte na captura de tela por motivos de segurança.
Para sua referência adicional aqui e aqui
Depois de ler sua pergunta, não estou convencido de que sua "cadeia de logs" esteja quebrada por causa desse
Appsure
backup. Supondo que você possa restaurar oFULL
backup feitoAPPSURE
na linha 5WITH NORECOVERY
, você poderá restaurar oDIFFERENTIAL
backup feito na linha 6 sem problemas.Acredito que sua verdadeira pergunta seja:
Pode haver maneiras mais sofisticadas de determinar isso, mas talvez uma consulta simples para verificar se os backups não somente cópia estão armazenados em um local que você não esperava seria suficiente.
Pela captura de tela, parece que seus backups normais estão sendo armazenados em
E:\SQLBackups
. Pode ser suficiente executar uma consulta simples para verificarFULL
se os backups que não são somente cópia estão armazenados em outro lugar.