Поделиться через


Восстановление базы данных до состояния, сохраненного в моментальном снимке

Область применения:SQL Server

При повреждении данных в базе данных в сети в некоторых случаях вместо восстановления базы данных из резервной копии будет уместно восстановить базу данных из моментального снимка базы данных, соответствующего времени, предшествующему повреждению. Например, с помощью возврата базы данных можно устранить такую серьезную недавнюю ошибку пользователя, как удаление таблицы. Однако все изменения данных, внесенные после создания моментального снимка, будут утеряны.

Перед началом

Ограничения

Возврат не поддерживается в следующих условиях.

  • Существует несколько моментальных снимков базы данных. Для восстановления должен быть только один моментальный снимок базы данных, который вы планируете использовать для восстановления.

  • В базе данных имеются доступные только для чтения или сжатые файловые группы.

  • Какие-либо файлы находятся вне сети, хотя были в сети на момент создания снимка.

Перед тем как выполнять возврат базы данных, нужно учитывать следующие ограничения.

  • Возврат не предназначен для восстановления носителей. Моментальный снимок базы данных — это неполная копия файлов базы данных, поэтому в случае, если база данных или ее снимок будут повреждены, вероятно, возврат к снимку станет невозможным. Кроме того, даже если возврат возможен, в случае повреждения он вряд ли устранит проблему. Таким образом, создание регулярных резервных копий и тестирование плана восстановления абсолютно необходимы для защиты базы данных. Дополнительные сведения см. в разделе Резервное копирование и восстановление баз данных SQL Server.

    Примечание.

    Если необходима возможность восстановления базы данных-источника на момент времени, в который был создан моментальный снимок базы данных, используйте модель полного восстановления и реализуйте политику резервного копирования, позволяющую это сделать.

  • Исходная база данных заменяется восстановленной базой данных, поэтому любые изменения, внесенные в базу данных после создания точки восстановления, будут утеряны.

  • Операция возврата также перезаписывает старый файл журнала и перестраивает журнал. Поэтому выполнить повтор (накат) изменений возвращенной базы данных до момента ошибки пользователя будет невозможно. Вследствие этого рекомендуется создать резервную копию журнала перед возвратом базы данных.

    Примечание.

    Хотя первоначальный журнал невозможно восстановить для продвижения базы данных вперёд, информация из этого файла журнала может быть полезна при реконструкции потерянных данных.

  • При возврате разрывается цепочка резервных копий журналов. Следовательно, прежде чем можно будет выполнять резервное копирование журналов возвращенной базы данных, необходимо создать полную резервную копию базы данных или файлов. Рекомендуется создать полную резервную копию базы данных.

  • Во время операции возврата моментальный снимок и база данных-источник будут недоступны. Исходная база данных и моментальный снимок помечены как "В восстановлении". Если во время операции восстановления возникает ошибка, при повторном запуске базы данных операция восстановления попытается завершить восстановление.

  • Метаданные возвращенной базы данных совпадают с метаданными на момент снимка.

  • Операция восстановления удаляет все полнотекстовые каталоги.

Предварительные требования

Убедитесь, что исходная база данных и моментальный снимок базы данных удовлетворяют следующим требованиям.

Безопасность

Разрешения

Любой пользователь, имеющий разрешение RESTORE DATABASE на базу данных-источник, может вернуть её в состояние на момент создания моментального снимка базы данных.

Как восстановить базу данных из снимка состояния базы данных с помощью Transact-SQL

Восстановление базы данных до состояния, сохраненного в моментальном снимке

Примечание.

Пример этой процедуры см. в подразделе Примеры (Transact-SQL)далее в этом разделе.

  1. Укажите моментальный снимок базы данных, к которому вы хотите вернуть базу данных. Моментальные снимки базы данных можно просматривать в SQL Server Management Studio (см. Просмотр моментального снимка базы данных (SQL Server)). Кроме того, можно определить исходную базу данных представления из столбца source_database_id представления каталога sys.database (Transact-SQL).

  2. Удалите все другие моментальные снимки базы данных.

    Сведения об удалении моментальных снимков см. в разделе "Удаление моментального снимка базы данных" (Transact-SQL). Если база данных использует модель полного восстановления, перед тем как выполнять возврат, следует создать резервную копию журнала. Дополнительные сведения см. в статье Резервное копирование журнала транзакций (SQL Server) или резервное копирование журнала транзакций при повреждении базы данных (SQL Server).

  3. Выполните операцию восстановления.

    Чтобы выполнить операцию восстановления базы данных-источника, необходимо обладать разрешением RESTORE DATABASE. Чтобы восстановить базу данных, необходимо ввести следующую инструкцию Transact-SQL.

    RESTORE DATABASE database_name FROM DATABASE_SNAPSHOT =database_snapshot_name

    где database_name — это база данных-источник, а database_snapshot_name — имя моментального снимка, к которому вы хотите восстановить базу данных. Обратите внимание, что в данной инструкции необходимо задавать имя моментального снимка, а не устройство резервного копирования.

    Для получения дополнительной информации см. RESTORE (Transact-SQL).

    Примечание.

    В процессе выполнения операции восстановления моментальный снимок и база данных-источник являются недоступными. Исходная база данных и моментальный снимок помечены как "In restore". Если во время операции восстановления возникает ошибка, она попытается завершить восстановление при повторном запуске базы данных.

  4. В случае смены владельца базы данных после создания ее моментального снимка, возможно, понадобится обновить соответствующую информацию после восстановления.

    Примечание.

    После восстановления в базе данных сохраняются разрешения и настройки (например модель восстановления и сведения о владельце базы данных) моментального снимка базы данных.

  5. Запустите базу данных.

  6. Кроме того, можно создать резервную копию восстанавливаемой базы данных, особенно если в ней используется полная модель восстановления или модель восстановления с неполным протоколированием. Сведения о резервном копировании базы данных см. в статье "Создание полной резервной копии базы данных (SQL Server)".

Примеры (Transact-SQL)

В этом разделе содержатся примеры восстановления базы данных до состояния, соответствующего моментальному снимку.

А. Возврат базы данных AdventureWorks к состоянию моментального снимка

В этом примере предполагается, что в базе данных AdventureWorks2022 существует только один моментальный снимок. Пример создания моментального снимка, в который будет возвращена база данных, см. в разделе "Создание моментального снимка базы данных" (Transact-SQL).

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

B. Восстановление базы данных Sales до состояния моментального снимка

В этом примере предполагается, что в базе данных Sales имеется два моментальных снимка: sales_snapshot0600 и sales_snapshot1200. В примере происходит удаление более раннего моментального снимка, и база данных восстанавливается до состояния более позднего моментального снимка.

Код для создания образца базы данных и моментальных снимков, на котором основан этот пример, см. в следующем разделе:

--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  

Связанные задачи

См. также

Моментальные снимки базы данных (SQL Server)
RESTORE (Transact-SQL)
sys.databases (Transact-SQL)
Зеркалирование баз данных и моментальные снимки баз данных (SQL Server)