Digamos que eu esteja executando um backup de log e esse backup de log leve 10 minutos para ser concluído. Durante essa janela de 10 minutos, outras transações são executadas. Dado o exemplo abaixo, quais transações o backup de log realmente contém?
- A transação A confirma
- A transação B é aberta
- O backup de log começa
- A transação C é aberta
- Confirmações da transação B
- Backup de log concluído
- Confirmações da transação C
O arquivo de backup de log deve conter todas as transações (incluindo as que ainda não foram confirmadas) até o momento em que o backup terminou de ser executado e você pode verificá-lo da seguinte forma:
Uma vez criado o banco de dados e a tabela que será utilizada no teste, faça o primeiro backup completo para que seja possível fazer um backup de log posteriormente.
Agora que foi feito um backup completo vamos inserir alguns dados na tabela:
Observe que a segunda inserção está sob um
BEGIN TRAN
que ainda não foi confirmado. Em seguida, usaremos a função [fn_dblog para verificar o conteúdo do arquivo de log antes de fazer um backup de log.Na imagem podemos ver LSNs relacionadas ao primeiro e segundo
INSERT
Um backup de log foi feito e podemos ler seu conteúdo com a função fn_dump_dblog usando a seguinte consulta:
Como podemos ver, esses LSNs relacionados à transação inacabada, na verdade, estão no backup do log de transações, mesmo que não tenham sido confirmados. O problema é que, como a Microsoft diz
Portanto, após realizar uma restauração desse backup de log, os dados relacionados a essas transações inacabadas serão revertidos para manter o banco de dados em um estado consistente (consulte Recuperação e o log de transações ).
Você pode considerar seguras (podem ser restauradas) todas as transações que foram confirmadas. Isso pode ser verificado descartando o banco de dados MyDB e restaurando os backups que foram gerados com as etapas acima.
O log de transações contém todas as transações que foram totalmente confirmadas no momento em que o log de transações é concluído.
Para usar o exemplo acima, o log de transações contém A e B. Isso é semelhante ao backup completo, que contém um backup de log final de todas as transações que foram confirmadas quando o backup é concluído.
Este site é excelente leitura adicional. https://sqlbak.com/academy/transaction-log-backup