Truncamento de log de transações

Se os registros de log nunca fossem excluídos do log de transações, isso preencheria finalmente todo o espaço de disco que está disponível nos arquivos de log físicos. O truncamento de log libera automaticamente espaço do log lógico para ser reutilizado pelo log de transações.

Exceto quando atrasado por alguma razão, o truncamento de log acontece automaticamente como se segue:

  • No modelo de recuperação simples, depois de um ponto de verificação.

  • No modelo de recuperação completa ou bulk-logged, depois de um backup de log, se um ponto de verificação tiver acontecido desde o backup prévio. Para obter mais informações, consulte "Truncamento de log sob o modelo de recuperação completa ou com log em massa", adiante neste tópico.

Embora automático, o truncamento de log pode ser demorado por uma variedade de fatores. Para obter informações sobre o que pode atrasar o truncamento de log, consulte Fatores que podem atrasar o truncamento de log.

Observação importanteImportante

No caso de uma demora longa em truncamento de log, o log de transações pode ficar cheio. Para obter informações sobre como lidar com um log de transações completo, consulte Solucionando problemas em um log de transação completa (Erro 9002).

Para obter informações arquitetônicas sobre truncamento de log, consulte "Como funciona o truncamento de log", posteriormente neste tópico.

Truncamento de log nos modelos de recuperação completa e com log em massa

No modelo de recuperação completa ou bulk-logged, a parte inativa do log não pode ser truncada até que todos os seus registros de log tenham sido capturados em um backup de log. Isso é necessário para manter a cadeia de logs—uma série de registros de log que têm uma seqüência irrompível de números de seqüência de log (LSNs). O log é truncado quando você faz backup de log de transações, assumindo que as seguintes condições existem:

  • Um ponto de verificação aconteceu desde que o log teve o último backup. Um ponto de verificação é essencial mas não suficiente para truncar o log no modelo de recuperação completa ou modelo de recuperação bulk-logged. Depois de um ponto de verificação, o log permanece intacto pelo menos até o próximo backup de log de transações.

    Para obter mais informações, consulte Pontos de verificação e a parte ativa do log.

  • Nenhum outro fator é impeditivo de transação de log.

    Geralmente, com backups regulares, o espaço de log é regularmente liberado para uso futuro. Porém, vários fatores, como uma transação longa, podem impedir temporariamente o truncamento de log. Para obter mais informações, consulte Fatores que podem atrasar o truncamento de log.

  • A instrução BACKUP LOG não especifica WITH COPY_ONLY.

Para efetuar backup de log de transações

Como trabalha o truncamento de log

ObservaçãoObservação

O truncamento não reduz o tamanho de um arquivo de log físico. Reduzir o tamanho físico de um arquivo de log requer o encolhimento do arquivo. Para obter informações sobre como encolher o tamanho do arquivo de log físico, consulte Reduzindo o log de transações.

O log de transações é um arquivo embrulhado. Quando o banco de dados é criado, o arquivo de log lógico começa no início do arquivo de log físico. Novos registros de log são adicionados no final do log lógico e expandem para o final do log físico. O log de transações em um banco de dados mapeia um ou mais arquivos físicos. O Mecanismo de banco de dados do SQL Server divide cada arquivo de log físico interiormente em vários arquivos de log virtuais. O truncamento de log libera espaço no log lógico excluindo arquivos de log virtuais inativos do início do log lógico. Para obter informações detalhadas sobre arquitetura de log de transações, consulte Arquitetura lógica de log de transações e Arquitetura física de log de transações.

Arquivos de log virtuais são a unidade de espaço que pode ser usada de novo. Só podem ser truncados arquivos de log virtuais que contêm apenas registros de log inativos. A porção ativa do log de transações, o log ativo, não pode ser truncada, porque o log ativo é exigido para recuperar o banco de dados. O mais recente ponto de verificação define o log ativo. O log pode ser truncado até aquele ponto de verificação.

ObservaçãoObservação

Para obter informações sobre como arquivos de log virtuais funcionam, consulte Arquitetura física de log de transações.

Quando o ponto de verificação é executado, a porção inativa do log de transações é marcada como reutilizável. Depois disso, a porção inativa pode ser liberada por meio do truncamento de log. O truncamento libera os arquivos de log virtuais inativos para reutilização. Finalmente, quando um registro novo é gravado num log virtual liberado, aquele arquivo de log virtual fica ativo novamente.

Um pedaço de informações registrado em um ponto de verificação é o número de seqüência de log (LSN) do primeiro registro de log que deve estar presente para o êxito de uma ampla reversão de banco de dados. Este LSN é chamado de LSN de recuperação mínima (MinLSN). O início da porção ativa do log é o log virtual que contém o MinLSN. Quando um log de transações é truncado, somente os registros de log à frente deste arquivo de log virtual são liberados para reutilização.

As ilustrações seguintes mostram um log de transações antes e depois do truncamento. A primeira ilustração mostra um log de transações que nunca foi truncado. Atualmente, quatro arquivos de log virtuais estão em uso pelo log lógico. O log virtual inicia à frente do primeiro arquivo de log virtual e termina em log 4 virtual. O registro de MinLSN está em log 3 virtual. O log 1 virtual e o log 2 virtual contêm apenas registros de log inativos. Estes registros podem ser truncados. O log 5 virtual ainda está sem uso e não é parte do log lógico atual.

Log de transação com quatro logs virtuais

A segunda ilustração mostra como o log aparece depois de ser truncado. Log 1 virtual e log 2 virtual foram liberados para reutilização. O log lógico agora inicia no começo do log 3 virtual. O log 5 virtual ainda está sem uso e não é parte do log lógico atual.

Arquivo de log dividido em quatro arquivos de log virtuais