Partilhar via


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

Aplica-se a:SQL Server

Em uma restauração completa do banco de dados, o objetivo é restaurar todo o banco de dados. Todo o banco de dados fica offline durante a restauração. Antes que qualquer parte do banco de dados possa ficar online, todos os dados são recuperados até um ponto consistente em que 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 ou backups de dados, você deve restaurar todos os backups de log de transações subsequentes e, em seguida, recuperar o banco de dados. Você pode restaurar um banco de dados para um ponto de recuperação específico dentro de um destes backups de log. O ponto de recuperação pode ser uma data e hora específicas, uma transação marcada ou um número de sequência de log (LSN).

Ao restaurar um banco de dados, particularmente no modelo de recuperação completa ou no modelo de recuperação registado em massa, deve-se 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 uma ou mais das fases da restauração.

Fontes não confiáveis

Recomendamos que 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 física do banco de dados. 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 que não seja de produção. Além disso, examine o código escrito pelo usuário no banco de dados, como procedimentos armazenados ou outro código definido pelo usuário.

Backups de versões anteriores

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

Restaurando um banco de dados até o ponto de falha

Normalmente, a recuperação de um banco de dados até 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 tail-log. Se o log de transações ativo não estiver disponível, todas as transações nessa parte do log serão perdidas.

    Importante

    No modelo de recuperação bulk-logged, o backup de qualquer log que contenha operações bulk-logged requer acesso a todos os arquivos de dados no 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 recuperar o banco de dados (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY).

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

    A restauração do backup diferencial mais recente reduz o número de backups de log que devem 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. Recupere 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 tail-log é criado (2). Em seguida, o banco de dados é restaurado até 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 tail-log.

Restauração completa do banco de dados para o 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 Transact-SQL RESTORE

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

  1. RESTAURAR BASE DE DADOS BASE A PARTIR DE BACKUP COMPLETO DE BASE DE DADOS COM NORECOVERY;

  2. RESTAURAR BASE DE DADOS A PARTIR DO BACKUP COMPLETO DIFERENCIAL COM NORECOVERY;

  3. RESTAURAR LOG base de dados A PARTIR DE log_backup COM NORECOVERY;

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

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

Exemplo: Recuperando 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 até o ponto de falha. O exemplo cria uma cópia de segurança do tail-log da base de dados. Em seguida, o exemplo restaura um backup completo de banco de dados e backup de log e, em seguida, restaura o backup de tail-log. O exemplo recupera o banco de dados em uma etapa final separada.

Observação

Este exemplo utiliza um backup de banco de dados e um backup de log que são criados na seção "Usando backups de banco de dados no modelo de recuperação completa" em Backups Completos de Banco de Dados (SQL Server). Antes do backup do banco de dados, o banco de dados de exemplo AdventureWorks2022 foi definido para usar o modelo de recuperação completa.

USE master;  
--Create tail-log backup.  
BACKUP LOG AdventureWorks2022   
TO DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'    
   WITH NORECOVERY;   
GO  
--Restore the full database backup (from backup set 1).  
RESTORE DATABASE AdventureWorks2022   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'   
  WITH FILE=1,   
    NORECOVERY;  
  
--Restore the regular log backup (from backup set 2).  
RESTORE LOG AdventureWorks2022   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'   
  WITH FILE=2,   
    NORECOVERY;  
  
--Restore the tail-log backup (from backup set 3).  
RESTORE LOG AdventureWorks2022   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'  
  WITH FILE=3,   
    NORECOVERY;  
GO  
--recover the database:  
RESTORE DATABASE AdventureWorks2022 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 completa do banco de dados geralmente pode ser recuperada até 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 registo em massa, se o backup de registo contiver alterações em massa registadas no log, a recuperação no ponto no tempo não será possível.

Exemplos de cenários de restauração em ponto específico no tempo

O exemplo a seguir pressupõe um sistema de banco de dados de missão crítica para o qual um backup de banco de dados completo é criado diariamente à meia-noite, um backup de banco de dados diferencial é criado de hora em hora, de segunda a sábado, e 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 5h19 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 5h00 de quarta-feira.

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

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

Como alternativa, se o banco de dados precisar ser restaurado para seu estado às 3h04 de quinta-feira, mas o backup diferencial do banco de dados que foi criado às 3h00 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 da base de dados que foi criado às 2:00 de quinta-feira.

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

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

Observação

Para obter um exemplo de uma restauração para um momento específico, consulte Restaurar um banco de dados do SQL Server para um ponto no tempo (modelo de recuperação completa).

Tarefas relacionadas

Para restaurar um backup de banco de dados completo

Para restaurar um backup diferencial de banco de dados

Para restaurar um backup de log de transações

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

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

Ver também

RESTORE (Transact-SQL)
BACKUP (Transact-SQL)
Aplicar backups de logs de transações (SQL Server)
sp_addumpdevice (Transact-SQL)
Backups Completos de Base de Dados (SQL Server)
Backups Diferenciais (SQL Server)
Visão geral do backup de (SQL Server)
Visão geral da restauração e recuperação (SQL Server)