Compartilhar via


Restaurações de banco de dados completas (modelo de recuperação completa)

Em uma restauração completa do banco de dados, a meta é restaurar todo o banco de dados. Todo o banco de dados está offline durante a restauração. Antes que qualquer parte do banco de dados possa ficar online, todos os dados são recuperados para um ponto consistente no qual todas as partes do banco de dados estão no mesmo ponto no tempo e não existem transações não confirmadas.

No modelo de recuperação completa, depois de restaurar o backup de dados ou os backups, você deve restaurar todos os backups de log de transações subsequentes e, em seguida, recuperar a base de dados. Você pode restaurar um banco de dados para um ponto de recuperação específico em um desses backups de log. O ponto de recuperação pode ser uma data e hora específicas, uma transação marcada ou um LSN (número de sequência de log).

Ao restaurar um banco de dados, especialmente no modelo de recuperação completa ou no modelo de recuperação registrado em massa, você deve usar uma única sequência de restauração. Uma sequência de restauração consiste em uma ou mais operações de restauração que movem dados por meio de uma ou mais das fases de restauração.

Importante

Recomendamos que você não anexe ou restaure bancos de dados de fontes desconhecidas ou não confiáveis. Esses bancos de dados podem conter código mal-intencionado que pode executar código Transact-SQL não intencional ou causar erros modificando o esquema ou a estrutura do banco de dados físico. Antes de usar um banco de dados de uma fonte desconhecida ou não confiável, execute DBCC CHECKDB no banco de dados em um servidor de não produção e examine também o código, como procedimentos armazenados ou outro código definido pelo usuário, no banco de dados.

Neste tópico:

Observação

Para obter informações sobre o suporte para backups de versões anteriores do SQL Server, consulte a seção "Suporte à Compatibilidade" de RESTORE (Transact-SQL).

Restaurando um banco de dados até o ponto de falha

Normalmente, recuperar um banco de dados para o ponto de falha envolve as seguintes etapas básicas:

  1. Faça backup do log de transações ativo (conhecido como a parte final do log). Isso cria um backup de log final. Se o log de transações ativo estiver indisponível, todas as transações nessa parte do log serão perdidas.

    Importante

    No modelo de recuperação de log em massa, o backup de qualquer log que inclua operações registradas em massa exige acesso a todos os arquivos de dados do banco de dados. Se os arquivos de dados não puderem ser acessados, não será possível fazer backup do log de transações. Nesse caso, você precisa refazer manualmente todas as alterações feitas desde o backup de log mais recente.

    Para obter mais informações, consulte Tail-Log Backups (SQL Server).

  2. Restaure o backup completo mais recente do banco de dados sem efetuar a recuperação do banco de dados (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY).

  3. Se houver backups diferenciais, restaure o mais recente sem recuperar o banco de dados (RESTORE DATABASE database_name FROM differential_backup_device WITH NORECOVERY).

    Restaurar o backup diferencial mais recente diminui a quantidade de backups de log que precisam ser restaurados.

  4. Começando com o primeiro backup de log de transações que foi criado após o backup que você acabou de restaurar, restaure os logs em sequência com NORECOVERY.

  5. Recuperar o banco de dados (RESTORE DATABASE database_name WITH RECOVERY). Como alternativa, essa etapa pode ser combinada com a restauração do último backup de log.

A ilustração a seguir mostra essa sequência de restauração. Depois que ocorre uma falha (1), um backup de log final é criado (2). Em seguida, o banco de dados é restaurado para o ponto da falha. Isso envolve a restauração de um backup de banco de dados, um backup diferencial subsequente e cada backup de log feito após o backup diferencial, incluindo o backup de log final.

Concluir a restauração do banco de dados no momento de uma falha

Observação

Ao restaurar um backup de banco de dados em uma instância de servidor diferente, consulte Copiar Bancos de Dados com Backup e Restauração.

Sintaxe básica do RESTORE Transact-SQL

A sintaxe RESTORETransact-SQL básica para a sequência de restauração na ilustração anterior é a seguinte:

  1. RESTAURAR BASE DE DADOS DATABASE A PARTIR DE backup completo da base de dados COM NORECOVERY;

  2. RESTORE DATABASE database FROM full_differential_backup WITH NORECOVERY;

  3. RESTORE LOG database FROM log_backup WITH NORECOVERY;

    Repita essa etapa de restauração de log para cada backup de log adicional.

  4. RESTAURAR BANCO DE DADOS database COM RECUPERAÇÃO;

Exemplo: Recuperação até o ponto de falha (Transact-SQL)

O exemplo de Transact-SQL a seguir mostra as opções essenciais em uma sequência de restauração que restaura o banco de dados para o ponto de falha. O exemplo cria um backup de log final do banco de dados. Em seguida, o exemplo restaura um backup de banco de dados completo e um backup de log e restaura o backup de log final. O exemplo recupera o banco de dados em uma etapa final separada.

Observação

Este exemplo usa um backup de banco de dados e um backup de log que é criado na seção "Usando backups de banco de dados sob o modelo de recuperação completa" em Backups de Banco de Dados Completos (SQL Server). Antes do backup do banco de dados, o banco de dados de exemplo AdventureWorks2012 foi definido para usar o modelo de recuperação completa.

USE master;  
--Create tail-log backup.  
BACKUP LOG AdventureWorks2012   
TO DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'    
   WITH NORECOVERY;   
GO  
--Restore the full database backup (from backup set 1).  
RESTORE DATABASE AdventureWorks2012   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'   
  WITH FILE=1,   
    NORECOVERY;  
  
--Restore the regular log backup (from backup set 2).  
RESTORE LOG AdventureWorks2012   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'   
  WITH FILE=2,   
    NORECOVERY;  
  
--Restore the tail-log backup (from backup set 3).  
RESTORE LOG AdventureWorks2012   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'  
  WITH FILE=3,   
    NORECOVERY;  
GO  
--recover the database:  
RESTORE DATABASE AdventureWorks2012 WITH RECOVERY;  
GO  

Restaurando um banco de dados para um ponto dentro de um backup de log

No modelo de recuperação completa, uma restauração de banco de dados completa geralmente pode ser recuperada em um ponto de tempo, uma transação marcada ou um LSN dentro de um backup de log. No entanto, no modelo de recuperação com registro em massa, se o backup de log contiver alterações registradas em massa, a recuperação em um ponto no tempo não será possível.

Cenários de exemplo para restauração pontual

O exemplo a seguir pressupõe um sistema de banco de dados crítico para o qual um backup de banco de dados completo é criado diariamente à meia-noite, um backup diferencial de banco de dados é criado na hora, de segunda a sábado, e os backups de log de transações são criados a cada 10 minutos ao longo do dia. Para restaurar o banco de dados para o estado em que estava às 5:19 da manhã de quarta-feira, faça o seguinte:

  1. Restaure o backup completo do banco de dados que foi criado terça-feira à meia-noite.

  2. Restaure o backup diferencial do banco de dados que foi criado às 5:00 da manhã de quarta-feira.

  3. Aplique o backup de log de transações criado às 5h10 da quarta-feira.

  4. Aplique o backup de log de transações criado às 5h20 da quarta-feira, especificando que o processo de recuperação se aplica apenas às transações que ocorreram antes das 5h19.

Como alternativa, se o banco de dados precisar ser restaurado ao seu estado às 3h04 de quinta-feira, mas o backup diferencial do banco de dados que foi criado às 3:00 da manhã de quinta-feira não estiver disponível, faça o seguinte:

  1. Restaure o backup do banco de dados que foi criado quarta-feira à meia-noite.

  2. Restaure o backup diferencial do banco de dados que foi criado às 2:00 da manhã de quinta-feira.

  3. Aplique todos os backups de log de transações criados das 2h10 às 3h de quinta-feira.

  4. Aplique o backup de log de transações criado às 3h10 da quinta-feira, interrompendo o processo de recuperação às 3h04 da manhã.

Tarefas Relacionadas

Para restaurar um backup de banco de dados completo

Para restaurar um backup de banco de dados diferencial

Para restaurar um backup de log de transações

Para restaurar um backup usando o SMO (SQL Server Management Objects)

Para restaurar um banco de dados para um ponto dentro de um backup de log

Consulte Também

RESTORE (Transact-SQL)
BACKUP (Transact-SQL)
Aplicar backups de log de transações (SQL Server)
sp_addumpdevice (Transact-SQL)
Backups completos do banco de dados (SQL Server)
Backups diferenciais (SQL Server)
Visão geral do backup (SQL Server)
Visão geral da restauração e recuperação (SQL Server)