Reverter um banco de dados para um instantâneo de banco de dados
Aplica-se a:SQL Server
Se os dados em um banco de dados online ficarem danificados, em alguns casos, reverter o banco de dados para um instantâneo do banco de dados anterior ao dano pode ser uma alternativa apropriada para restaurar o banco de dados a partir de um backup. Por exemplo, reverter um banco de dados pode ser útil para reverter um erro grave recente do usuário, como uma tabela descartada. No entanto, todas as alterações feitas após a criação do instantâneo são perdidas.
Antes de começar:
Para reverter um banco de dados para um instantâneo de banco de dados, usando:Transact-SQL
Antes de começar
Limitações e Restrições
A reversão não é suportada nas seguintes condições:
Existem vários instantâneos do banco de dados. Para reverter, deve haver apenas um snapshot para o banco de dados, para o qual se planeia reverter.
Existem todos os grupos de arquivos somente leitura ou compactados no banco de dados.
Todos os arquivos agora estão offline, mas estavam online quando o instantâneo foi criado.
Antes de reverter um banco de dados, considere as seguintes limitações:
A reversão não é destinada à recuperação de mídia. Um instantâneo de banco de dados é uma cópia incompleta dos arquivos de banco de dados, portanto, se o banco de dados ou o instantâneo do banco de dados estiver corrompido, a reversão de um instantâneo provavelmente será impossível. Além disso, mesmo quando é possível, é improvável que a reversão em caso de corrupção corrija o problema. Portanto, fazer backups regulares e testar seu plano de restauração é essencial para proteger um banco de dados. Para obter mais informações, consulte Backup e restauração de bancos de dados do SQL Server.
Observação
Se você precisar ser capaz de restaurar o banco de dados de origem para o ponto no tempo em que criou um instantâneo do banco de dados, use o modelo de recuperação completa 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, portanto, todas as atualizações do banco de dados desde a criação do instantâneo são perdidas.
A operação de reversão também substitui o ficheiro de registo antigo e recria o registo. Consequentemente, você não pode rolar o banco de dados revertido para o ponto de erro do usuário. Portanto, recomendamos que você faça backup do log antes de reverter um banco de dados.
Observação
Embora não seja possível restaurar o log original para rolar o banco de dados, as informações no arquivo de log original podem ser úteis para reconstruir dados perdidos.
A reversão quebra a cadeia de backup de log. Portanto, antes de fazer backups de log do banco de dados revertido, você deve primeiro fazer um backup completo do banco de dados ou do arquivo. Recomendamos um backup completo do banco de dados.
Durante uma operação de reversão, o instantâneo e o banco de dados de origem não estão disponíveis. O banco de dados de origem e a captura instantânea estão ambos marcados como "em restauração". Se ocorrer um erro durante a operação de reversão, quando o banco de dados for reiniciado, a operação de reversão tentará concluir a reversão.
Os metadados de um banco de dados revertido são os mesmos que os metadados no momento do instantâneo.
A reversão elimina todos os catálogos de texto completo.
Pré-requisitos
Certifique-se de que o banco de dados de origem e o instantâneo do banco de dados atendam aos seguintes pré-requisitos:
Verifique se o banco de dados não foi corrompido.
Observação
Se o banco de dados tiver sido corrompido, você precisará restaurá-lo a partir de backups. Para obter mais informações, consulte Restaurações Completas de Banco de Dados (Modelo de Recuperação Simples) ou Restaurações Completas de Banco de Dados (Modelo de Recuperação Completa).
Identifique um instantâneo recente que foi criado antes do erro. Para obter mais informações, consulte Visualizar um instantâneo de base de dados (SQL Server).
Remova quaisquer outros instantâneos que existam atualmente no banco de dados. Para obter mais informações, consulte Eliminar um Instantâneo de Banco de Dados (Transact-SQL).
Segurança
Permissões
Qualquer usuário que tenha permissões RESTORE DATABASE no banco de dados de origem pode revertê-lo para seu estado quando um instantâneo do banco de dados foi criado.
Como reverter um banco de dados para um instantâneo de banco de dados (usando Transact-SQL)
Para reverter um banco de dados para um instantâneo de banco de dados
Observação
Para obter um exemplo deste procedimento, consulte Exemplos (Transact-SQL), mais adiante nesta seção.
Identifique o instantâneo do banco de dados para o qual você deseja reverter o banco de dados. Você pode exibir os instantâneos em um banco de dados no SQL Server Management Studio (consulte Exibir um instantâneo de banco de dados (SQL Server)). Além disso, pode-se identificar o banco de dados de origem de uma vista na coluna source_database_id da sys.databases (Transact-SQL) vista de catálogo.
Elimine quaisquer outros instantâneos de base de dados.
Para obter informações sobre como descartar instantâneos, consulte eliminar um instantâneo de banco de dados (Transact-SQL). Se o banco de dados usar o modelo de recuperação completa, antes de reverter, você deverá fazer backup do log. Para obter mais informações, consulte fazer backup de um log de transações (SQL Server) ou fazer backup do log de transações quando o banco de dados está danificado (SQL Server).
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:
RESTAURAR BASE DE DADOS database_name A PARTIR DA CÓPIA DE BANCO DE DADOS =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ê deseja reverter o banco de dados. Observe que, nesta 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ção
Durante a operação de reversão, o instantâneo e o banco de dados de origem não estão disponí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, ele tentará concluir a reversão quando o banco de dados for iniciado novamente.
Se o proprietário do banco de dados tiver sido alterado desde a criação do instantâneo do banco de dados, convém atualizar o proprietário do banco de dados revertido.
Observação
O banco de dados revertido retém as permissões e a configuração (como proprietário do banco de dados e modelo de recuperação) do instantâneo do banco de dados.
Inicie o banco de dados.
Opcionalmente, faça backup do banco de dados revertido, especialmente se ele usar o modelo de recuperação completo (ou registrado em massa). Para fazer backup de um banco de dados, consulte Criar um backup completo de banco de dados (SQL Server).
Exemplos (Transact-SQL)
Esta seção contém os seguintes exemplos de como reverter um banco de dados para um instantâneo de banco de dados:
Um. Revertendo um instantâneo no banco de dados AdventureWorks
Este exemplo pressupõe que apenas um instantâneo exista atualmente no banco de dados AdventureWorks2022
. Para obter o exemplo que cria o instantâneo para o qual o banco de dados é revertido aqui, consulte Criar um instantâneo de banco de dados (Transact-SQL).
USE master;
-- Reverting AdventureWorks to AdventureWorks_dbss1800
RESTORE DATABASE AdventureWorks from
DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';
GO
B. Revertendo uma imagem instantânea no banco de dados de Vendas
Este exemplo pressupõe que existam atualmente dois instantâneos na base de dados do 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 consultar o código que cria o banco de dados de exemplo e os instantâneos dos quais este exemplo depende, veja:
Para obter o banco de dados Sales e o instantâneo sales_snapshot0600, veja "Criar um banco de dados com grupos de arquivos" e "Criar um instantâneo de banco de dados" em CREATE DATABASE (SQL Server Transact-SQL).
Para obter o sales_snapshot1200 instantâneo, consulte "Criando um instantâneo no banco de dados Sales" em Criar um instantâneo de banco de dados (Transact-SQL).
--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
Tarefas relacionadas
Ver 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 de Banco de Dados (SQL Server)