Reverter um banco de dados para um instantâneo do banco de dados

Aplica-se a: SQL Server

Se os dados em um banco de dados online forem danificados, em alguns casos, reverter o banco de dados para um instantâneo do banco de dados que preceda o dano pode ser uma alternativa apropriada para restaurar o banco de dados de um backup. Por exemplo, reverter um banco de dados pode ser útil para reverter um erro sério recente de usuário, como uma tabela descartada. Porém, todas as mudanças feitas depois que o instantâneo foi criado serão perdidas.

Antes de começar

Limitações e Restrições

Não há suporte para a reversão nas seguintes condições:

  • Há vários instantâneos do banco de dados. Para reverter, deve haver apenas um instantâneo para o banco de dados para o qual você planeja reverter.

  • Grupos de arquivos somente leitura ou compactados existem no banco de dados.

  • Há algum arquivo offline agora, mas que estava online quando o instantâneo foi criado.

Antes de reverter um banco de dados, considere as seguintes limitações:

  • Reverter não é destinado à recuperação de mídia. Um instantâneo do banco de dados é uma cópia incompleta dos arquivos de banco de dados. Assim, se o banco de dados ou o instantâneo do banco de dados estiver corrompido, reverter de um instantâneo será praticamente impossível. Além disso, mesmo quando isso é possível, é improvável que a reversão corrija o problema no caso de corrupção. Portanto, é essencial fazer backups e testar regularmente seu plano de restauração para proteger um banco de dados. Para obter mais informações, consulte Fazer backup e restaurar bancos de dados do SQL Server.

    Observação

    Se você precisa ser capaz de restaurar o banco de dados de origem para o momento determinado em que o instantâneo do banco de dados foi criado, use um modelo de recuperação completo e implemente uma política de backup que permita fazer isso.

  • O banco de dados de origem original é substituído pelo banco de dados revertido. Assim, as atualizações feitas no banco de dados desde a criação do instantâneo são perdidas.

  • A operação de reversão também substitui o arquivo de log antigo e recria o log. Consequentemente, você não pode fazer roll forward do banco de dados revertido para o ponto do erro do usuário. Portanto, recomendamos que você faça backup do log antes de reverter um banco de dados.

    Observação

    Embora você não possa restaurar o registro original para roll-forward do banco de dados, a informações no arquivo de log original pode ser útil para reconstruir os dados perdidos.

  • A reversão quebra a cadeia de backup de log. Então, antes de fazer o backup de log do banco de dados revertido, você deve primeiro fazer um backup do banco de dados completo ou um backup de arquivo. Recomendamos um backup de banco de dados completo.

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

  • Os metadados de um banco de dados revertido são iguais aos metadados na hora do instantâneo.

  • A reversão cancela todos os catálogos de texto completo.

Pré-requisitos

Verifique se o banco de dados de origem e o instantâneo do banco de dados atendem aos seguintes pré-requisitos:

Segurança

Permissões

Qualquer usuário que tenha permissões RESTORE DATABASE no banco de dados de origem pode revertê-lo ao estado em que estava quando o instantâneo de banco de dados foi criado.

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

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

Observação

Para obter um exemplo deste procedimento, consulte Exemplos (Transact-SQL), posteriormente nesta seção.

  1. Identifique o instantâneo do banco de dados para o qual você quer reverter o banco de dados. É possível exibir os instantâneos em um banco de dados do SQL Server Management Studio (veja Exibir um instantâneo do banco de dados (SQL Server)). Além disso, você pode identificar o banco de dados de origem em uma exibição da coluna source_database_id da exibição do catálogo sys.databases (Transact-SQL).

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

    Para obter informações sobre como remover instantâneos, veja Remover 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, veja Fazer backup do log de transações (SQL Server) ou Fazer backup do log de transações quando o banco de dados está danificado (SQL Server).

  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:

    RESTORE DATABASE database_name FROM DATABASE_SNAPSHOT =database_snapshot_name

    Em que database_name é o banco de dados de origem e database_snapshot_name é o nome do instantâneo para o qual você deseja 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, confira RESTORE (Transact-SQL).

    Observação

    Durante a operação de reversão, o instantâneo e o banco de dados de origem estão indisponíveis. O banco de dados de origem e o instantâneo são 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çã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 fazer backup de um banco de dados, veja Criar uma instância de backup do SQL Server completo (SQL Server).

Exemplos (Transact-SQL)

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

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

Este exemplo presume que existe apenas um instantâneo atualmente no banco de dados AdventureWorks2022 . Para obter o exemplo que cria o instantâneo para o qual o banco de dados é revertido, veja 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 database_id 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  

Related Tasks

Consulte Também

Instantâneos de banco de dados (SQL Server)
RESTORE (Transact-SQL)
sys.databases (Transact-SQL)
Espelhamento de banco de dados e instantâneos do banco de dados (SQL Server)