Compartilhar via


Como aplicar um backup de log de transações (Transact-SQL)

Para aplicar um backup de log de transações a um banco de dados, os seguintes itens devem ser verdadeiros:

  • Antes do backup de banco de dados completo ou diferencial mais recente tiver sido criado, o banco de dados deverá usar o modelo de recuperação completa ou o modelo de recuperação bulk-logged.

  • A sequência de restauração deve ter especificado WITH NORECOVERY ao restaurar backups anteriores.

  • Devem ser aplicados backups de log na sequência na qual eles foram criados, sem qualquer intervalo na cadeia de logs. Exceto o último backup de log, que você deve usar WITH NORECOVERY, como segue:

    RESTORE LOG <database_name> FROM <backup_device> WITH NORECOVERY;
    
  • Ao aplicar o último backup de log, você pode fazer qualquer um dos seguintes:

    • Recuperar o banco de dados como parte da última instrução BACKUP LOG:

      RESTORE LOG <database_name> FROM <backup_device> WITH RECOVERY;
      GO
      
    • Espere para recuperar o banco de dados usando uma instrução separada RESTORE DATABASE:

      RESTORE LOG <database_name> FROM <backup_device> WITH NORECOVERY; 
      RESTORE DATABASE <database_name> WITH RECOVERY;
      GO
      

      Ao esperar para recuperar o banco de dados você tem a oportunidade de verificar se restaurou todos dos backups de log necessários. Essa abordagem é aconselhável quando você estiver executando uma restauração point-in-time.

Observação importanteImportante

Nós recomendamos que você sempre especifique explicite WITH NORECOVERY ou WITH RECOVERY em toda instrução RESTORE para eliminar a ambiguidade. Isso é particularmente importante ao escrever scripts.

Para aplicar um backup de log de transações

  1. Execute a instrução RESTORE para aplicar o backup de log de transações, especificando o seguinte:

    • O nome do banco de dados ao qual o log de transações será aplicado.

    • O dispositivo de backup a partir de onde o backup de log de transações será restaurado.

    • A cláusula NORECOVERY.

    A sintaxe básica porque essa instrução é como segue:

    RESTORE LOG database_name FROM <backup_device> WITH NORECOVERY.

    Onde database_name é o nome do banco de dados e <backup_device> é o nome do dispositivo que contém o backup de log que está sendo restaurado.

  2. Repita a etapa 1 para cada backup de log de transações você tiver que aplicar.

  3. Depois de restaurar o último backup na sua sequência de restauração, para recuperar o uso de banco de dados use a instrução seguinte:

    RESTORE database_name WITH RECOVERY

    Observação importanteImportante

    Se você estiver criando um banco de dados espelho, omita a etapa de recuperação. Um banco de dados espelho deve permanecer no estado RESTORING.

Exemplo

Por padrão, o banco de dados AdventureWorks2008R2 usa o modelo de recuperação simples. Os exemplos seguintes requerem a modificação do banco de dados para usar o modelo de recuperação completa, como segue:

ALTER DATABASE AdventureWorks2008R2 SET RECOVERY FULL

A. Aplicando um único backup de log de transações

O exemplo seguinte inicia restaurando o banco de dados AdventureWorks2008R2 usando um backup de banco de dados completo que reside em um dispositivo de backup chamado AdventureWorks2008R2_1. O exemplo aplica então o primeiro backup de log de transações que reside em um dispositivo de backup chamado AdventureWorks2008R2_log. Por fim, o exemplo recupera o banco de dados.

RESTORE DATABASE AdventureWorks2008R2
   FROM AdventureWorks2008R2_1
   WITH NORECOVERY
GO
RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2_log
   WITH FILE = 1,
   WITH NORECOVERY
GO
RESTORE DATABASE AdventureWorks2008R2
   WITH RECOVERY
GO

B. Aplicando múltiplos backups de log de transações

O exemplo seguinte inicia restaurando o banco de dados AdventureWorks2008R2 usando um backup de banco de dados completo que reside em um dispositivo de backup chamado AdventureWorks2008R2_1. O exemplo aplica então, um por um, os três primeiros backups de log de transações que residem em um dispositivo de backup chamado AdventureWorks2008R2_log. Por fim, o exemplo recupera o banco de dados.

RESTORE DATABASE AdventureWorks2008R2
   FROM AdventureWorks2008R2_1
   WITH NORECOVERY
GO
RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2_log
   WITH FILE = 1,
   NORECOVERY
GO
RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2_log
   WITH FILE = 2,
   WITH NORECOVERY
GO
RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2_log
   WITH FILE = 3,
   WITH NORECOVERY
GO
RESTORE DATABASE AdventureWorks2008R2
   WITH RECOVERY
GO