Как восстановить базу данных до моментального снимка базы данных (Transact-SQL)

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

Важное примечаниеВажно!

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

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

Важное примечаниеВажно!

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

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

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

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

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

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

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

    RESTORE DATABASE <имя_базы_данных> FROM DATABASE_SNAPSHOT =<имя_моментального_снимка_базы_данных>

    Параметр <имя_базы_данных> представляет базу данных-источник, а параметр <имя_моментального_снимка_базы_данных> задает имя моментального снимка базы данных, до которого необходимо восстановить базу данных. Обратите внимание, что в данной инструкции необходимо задавать имя моментального снимка, а не устройство резервного копирования.

    Дополнительные сведения см. в разделе RESTORE (Transact-SQL).

    ПримечаниеПримечание

    В процессе выполнения операции восстановления моментальный снимок и база данных-источник являются недоступными. База данных-источник и моментальный снимок помечаются как «Восстанавливаемый». В случае возникновения ошибки в процессе восстановления система попытается продолжить его при следующем запуске базы данных.

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

    ПримечаниеПримечание

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

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

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

Пример

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

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

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

USE master;
-- Reverting AdventureWorks2008R2 to AdventureWorks2008R2_dbss1800
RESTORE DATABASE AdventureWorks2008R2 from 
DATABASE_SNAPSHOT = 'AdventureWorks2008R2_dbss1800';
GO

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

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

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

  • Сведения о создании базы данных Sales и моментального снимка sales_snapshot0600 см. в подразделах «Создание баз данных с файловыми группами» и «Создание моментального снимка базы данных» раздела CREATE DATABASE (Transact-SQL).

  • Сведения о создании моментального снимка sales_snapshot1200 см. в подразделе «Создание моментального снимка базы данных Sales» раздела Как создать моментальный снимок базы данных (Transact-SQL).

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