Arquitetura lógica de log de transações

O log de transações do SQL Server opera de forma lógica como se o log de transações fosse uma cadeia de caracteres de registros de log. Cada registro de log é identificado por um LSN (número de seqüência de log). Cada registro de log novo é gravado no final lógico do log com um LSN maior que o do registro antes da gravação.

Os registros de log são armazenados em seqüência consecutiva conforme são criados. Cada registro de log contém a ID da transação a que pertence. Para cada transação, todos os registros de log associados com a transação são vinculados individualmente em uma cadeia usando ponteiros de retrocesso que aceleram a reversão da transação.

Os registros de log para modificações de dados registram a operação lógica executada ou as imagens anteriores e posteriores dos dados modificados. A imagem anterior é uma cópia dos dados antes da execução da operação; a imagem posterior é uma cópia dos dados após a execução da operação.

As etapas para recuperar uma operação dependem do tipo de registro de log:

  • Log da operação lógica

    • Para avançar a operação lógica, é executada a operação novamente.

    • Para reverter a operação lógica, é executada a operação lógica inversa.

  • Log da imagem anterior e posterior

    • Para avançar a operação lógica, é aplicada a imagem posterior.

    • Para reverter a operação lógica, é aplicada a imagem anterior.

São registrados muitos tipos de operações no log de transações. Essas operações incluem:

  • O início e o término de cada transação.

  • Toda modificação de dados (inserção, atualização ou exclusão). Isso inclui mudanças por procedimentos armazenados do sistema ou instruções DDL (linguagem de definição de dados) para qualquer tabela, inclusive tabelas do sistema.

  • Toda extensão e alocação ou desalocação de página.

  • Criando ou descartando uma tabela ou um índice.

Operações de reversão também são registradas. Cada transação reserva espaço no log de transações para verificar se há espaço de log suficiente para oferecer suporte a uma reversão causada por uma instrução de reversão explícita ou se um erro for encontrado. A quantidade de espaço reservada depende das operações executadas na transação, mas geralmente é igual à quantidade de espaço usada para registrar cada operação. Esse espaço reservado é liberado quando a transação é concluída.

A seção do arquivo de log do primeiro registro de log que deve estar disponível para o êxito de uma reversão em todo o banco de dados para o registro de log da última gravação é chamada de parte ativa do log, ou log ativo. Essa é a seção do log necessária para fazer uma recuperação completa do banco de dados. Nenhuma parte do log ativo pode ter sido truncada.