Executando uma restauração completa de banco de dados (modelo de recuperação completa)

Em uma restauração completa de banco de dados, o objetivo é restaurar todo o banco de dados. O banco de dados inteiro fica offline durante a restauração. Antes que qualquer parte do banco de dados possa ficar online, todos os dados são recuperados a um ponto consistente, no qual todas as partes do banco de dados estejam no mesmo momento determinado e não exista nenhuma transação não confirmada.

No modelo de recuperação completa, o banco de dados pode ser restaurado para um momento determinado específico. O momento determinado pode ser o backup disponível mais recente, uma determinada data e hora ou uma transação marcada.

Observação sobre segurançaObservação sobre segurança

É recomendável não anexar ou restaurar bancos de dados de origens desconhecidas ou não confiáveis. Esses bancos de dados podem conter códigos mal-intencionados que podem executar códigos Transact-SQL inesperados ou causar erros que modifiquem 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, como procedimentos armazenados ou outro código definido pelo usuário, no banco de dados.

Restaurando um banco de dados completo

Normalmente, a recuperação de um banco de dados ao ponto da falha envolve as seguintes etapas básicas:

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

    Observação importanteImportante

    No modelo de recuperação bulk-logged, o backup de qualquer log que contenha operações em massa 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 um backup do log de transações. Nesse caso, você tem de refazer manualmente todas as alterações feitas desde o backup de log mais recente.

    Para obter mais informações, consulte Backups da parte final do log.

  2. Restaure o backup de banco de dados completo mais recente sem recuperar o 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).

  4. Iniciando com o primeiro backup de log de transações criado depois do backup que você acaba de restaurar, restaure os logs em sequência com NORECOVERY.

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

  6. Uma restauração completa de banco de dados pode, em geral, ser restaurada a um ponto ou transação marcada dentro de um backup de log. Porém, no modelo de recuperação bulk-logged, se o backup de log contiver alterações registradas em massa, a recuperação pontual não será possível. Para obter mais informações, consulte Restaurando um banco de dados para um ponto em um backup.

A ilustração a seguir mostra este processo. Depois de uma falha (1), um backup do final do log de final é criado (2). Em seguida, o banco de dados é restaurado ao ponto da falha. Isso envolve a restauração de um backup de banco de dados, de um backup diferencial subsequente e de todos os backups de log feitos depois do backup diferencial, inclusive o do backup do final do log.

Restauração de banco de dados completa para o momento da falha

Ao restaurar um banco de dados completamente, deve ser usada uma única sequência de restauração. O exemplo a seguir mostra as opções críticas em uma sequência de restauração para o cenário de restauração completa do banco de dados no qual o banco de dados é restaurado até o ponto de falha. Uma sequência de restauração consiste em uma ou mais operações de restauração que movem dados por uma ou mais etapas de restauração. Sintaxe e detalhes que não sejam relevantes a esse propósito são omitidos.

O banco de dados é restaurado e rolado para frente. Um banco de dados diferencial é usado para reduzir o tempo de rolagem. Essa sequência de restauração tem por objetivo eliminar perda de trabalho; o último backup a ser restaurado é um backup do final do log.

A sintaxe básica de RESTORE para a sequência de restauração é:

  1. RESTORE DATABASE database FROM full database backup WITH NORECOVERY;

  2. RESTORE DATABASE database FROM full_differential_backup WITH NORECOVERY;

  3. RESTORE LOG database FROM log_backup WITH NORECOVERY;

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

  4. RESTORE DATABASE database WITH RECOVERY;

Exemplo

Para o exemplo a seguir, o banco de dados de exemplo AdventureWorks2008R2 foi definido para usar o modelo de recuperação completa antes que fosse feito o backup do banco de dados. O exemplo cria um backup do final do log do banco de dados AdventureWorks2008R2. Em seguida, o exemplo restaura um backup de banco de dados completo anterior e um backup de log e, em seguida, o exemplo restaura o backup do final do log. O exemplo recupera o banco de dados em uma etapa final, separada.

ObservaçãoObservação

Esse exemplo usa um backup de banco de dados e um backup de log criados na seção "Usando backups de bancos de dados no modelo de recuperação completa" em Backups completos de banco de dados.

O exemplo inicia com uma instrução ALTER DATABASE que define o modelo de recuperação como FULL.

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

--Restore the regular log backup (from backup set 2).
RESTORE LOG AdventureWorks2008R2 
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2008R2FullRM.bak' 
  WITH FILE=2, 
    NORECOVERY;

--Restore the tail-log backup (from backup set 3).
RESTORE LOG AdventureWorks2008R2 
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2008R2FullRM.bak'
  WITH FILE=3, 
    NORECOVERY;
GO
--recover the database:
RESTORE DATABASE AdventureWorks2008R2 WITH RECOVERY;
GO

Recuperando até o ponto de falha

Para restaurar um backup de banco de dados completo

Observação importanteImportante

Quando você restaurar um backup de banco de dados em uma instância de servidor diferente, consulte Copiando bancos de dados com backup e restauração e Gerenciando metadados ao disponibilizar um banco de dados em outra instância do servidor.

Para restaurar um backup diferencial de banco de dados

Para restaurar um backup de log de transações

Depois de restaurar seu backup ou backups de dados, você deve restaurar todos os backups de log de transações posteriores e recuperar o banco de dados.

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

Recuperando até um momento determinado

No modelo de recuperação completa, um banco de dados pode ser restaurado a um momento determinado específico em um backup de log. O momento determinado pode ser uma determinada data ou hora, transação marcada ou LSN (número de sequência de log). Para obter mais informações, consulte Restaurando um banco de dados para um ponto em um backup.

Suporte a backups de versões anteriores do SQL Server

No SQL Server 2008, é possível restaurar um backup de banco de dados criado com o SQL Server 2000, o SQL Server 2005 ou o SQL Server 2008. Porém, backups master, model e msdb que foram criados usando-se SQL Server 2000 ou SQL Server 2005 não podem ser restaurados pelo SQL Server 2008. Além disso, backups do SQL Server 2008 não podem ser restaurados por nenhuma versão anterior do SQL Server.

O SQL Server 2008 usa um caminho padrão diferente das versões anteriores. Assim, para restaurar um banco de dados que foi criado no local padrão dos backups do SQL Server 2000 ou do SQL Server 2005, deve-se usar a opção MOVE. Para obter informações sobre o novo caminho padrão, consulte Locais de arquivos para instâncias padrão e nomeadas do SQL Server.

ObservaçãoObservação

Para obter informações sobre como atualizar um banco de dados que foi criado usando o SQL Server versão 7.0 ou anterior a SQL Server 2005, consulte Copiando bancos de dados do SQL Server 7.0 ou anterior.