Partilhar via


Como reverter banco de dados para um instantâneo do banco de dados (Transact-SQL)

Instantâneos do banco de dados não são armazenamentos redundantes, e em decorrência disso, não fornecem nenhuma proteção contra erros de disco ou outros tipos de dano. Porém, se um erro de usuário acontecer em um banco de dados online, você poderá reverter o banco de dados a um instantâneo do banco de dados que anteceda o erro.

Observação importanteImportante

É imprescindível fazer backups e testar regularmente seu plano de restauração para proteger um banco de dados. Se for necessário restaurar o banco de dados de origem no point-in-time em que você criou um instantâneo do banco de dados, implemente uma diretiva de backup que lhe permita fazer isso.

A reversão substitui o banco de dados de origem original pelo banco de dados revertido. A reversão para um instantâneo cancela todos os catálogos de texto completo.

Observação importanteImportante

Antes de fazer a reversão, você deve estar familiarizado com as informações presentes em Revertendo para um instantâneo do banco de dados.

Para reverter um banco de dados a um instantâneo do banco de dados

  1. Identifique o instantâneo do banco de dados para o qual você quer reverter o banco de dados. Você pode exibir os instantâneos em um banco de dados no SQL Server Management Studio (consulte Como exibir um instantâneo de banco de dados (SQL Server Management Studio)). Também, você pode identificar o banco de dados de origem a partir de uma exibição da coluna source_database_id da exibição do catálogosys.databases (Transact-SQL).

  2. Cancele qualquer outro instantâneo do banco de dados.

    Para obter informações em como cancelar instantâneos, consulte Como descartar um instantâneo do banco de dados (Transact-SQL). Se o banco de dados usar o modelo de recuperação completa, antes de fazer a reversão, você deve fazer o backup do log. Para obter mais informações, consulte Como fazer backup de um log de transações (SQL Server Management Studio) ou Como fazer backup do log de transações quando o banco de dados está danificado (Transact-SQL).

  3. Execute a operação de reversão.

    Uma operação de reversão requer permissões RESTORE DATABASE no banco de dados de origem. Para reverter o banco de dados, use a seguinte instrução Transact-SQL:

    <Database_name de RESTORE DATABASE> FROM DATABASE_SNAPSHOT =<database_snapshot_name>

    Onde <database_name> é o banco de dados de origem e <database_snapshot_name> é o nome do instantâneo para o qual você quer reverter o banco de dados. Observe que nessa instrução, você deve especificar um nome de instantâneo em vez de um dispositivo de backup.

    Para obter mais informações, consulte RESTORE (Transact-SQL).

    ObservaçãoObservação

    Durante a operação de reversão, o instantâneo e o banco de dados de origem estão indisponíveis. O instantâneo e o banco de dados de origem ficam ambos marcados como “Em restauração”. Se ocorrer um erro durante a operação de reversão, ela tentará terminar a reversão quando o banco de dados for novamente inicializado.

  4. Se o proprietário do banco de dados mudou desde a criação do instantâneo do banco de dados, convém atualizar o proprietário do banco de dados do banco de dados revertido.

    ObservaçãoObservação

    O banco de dados revertido retém as permissões e configuração (como proprietário de banco de dados e modelo de recuperação) do instantâneo do banco de dados.

  5. Inicie o banco de dados.

  6. Opcionalmente, faça backup do banco de dados revertido, especialmente se usar o modelo de recuperação completa (ou registrada em massa). Para obter informações sobre como fazer o backup do banco de dados, consulte Como executar backup de um banco de dados (SQL Server Management Studio) ou Como criar um backup de banco de dados completo (Transact-SQL).

Exemplo

Esta seção contém exemplos de reversão de um banco de dados para um instantâneo do banco de dados.

A. Revertendo um instantâneo no banco de dados AdventureWorks

Este exemplo presume que existe apenas um instantâneo atualmente no banco de dados AdventureWorks. Para obter o exemplo que cria o instantâneo para o qual o banco de dados é revertido, consulte Como criar um instantâneo do banco de dados (Transact-SQL).

USE master;
-- Reverting AdventureWorks to AdventureWorks_dbss1800
RESTORE DATABASE AdventureWorks from 
DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';
GO

B. Revertendo um instantâneo no banco de dados Sales

Este exemplo presume que existem dois instantâneos atualmente no banco de dados Sales : sales_snapshot0600 e sales_snapshot1200. O exemplo exclui o mais antigo dos instantâneos e reverte o banco de dados para o instantâneo mais recente.

Para obter o código para criar o banco de dados de exemplo e instantâneos dos quais esse exemplo depende, consulte:

--Test to see if sales_snapshot0600 exists and if it 
-- does, delete it.
IF EXISTS (SELECT dbid FROM sys.databases
    WHERE NAME='sales_snapshot0600')
    DROP DATABASE SalesSnapshot0600;
GO
-- Reverting Sales to sales_snapshot1200
USE master;
RESTORE DATABASE Sales FROM DATABASE_SNAPSHOT = 'sales_snapshot1200';
GO