Как вернуть базу данных к моментальному снимку базы данных (Transact-SQL)
Изменения: 5 декабря 2005 г.
Моментальные снимки базы данных не являются избыточным хранилищем данных и поэтому не обеспечивают защиту от ошибок диска и других типов повреждения данных. Однако если в оперативном режиме пользователь допустит ошибку в базе данных, то ее можно вернуть к моментальному снимку базы данных, который предшествовал этой ошибке.
Важно! |
---|
Создание регулярных резервных копий и тестирование плана восстановления необходимы для защиты базы данных. Если необходимо восстановить базу данных-источник на момент времени, в который был создан моментальный снимок базы данных, реализуйте политику резервного копирования, позволяющую это делать. |
В результате восстановления базы данных ее оригинал удаляется, а на его место записывается восстановленная база данных. Возврат к моментальному снимку удаляет все полнотекстовые каталоги.
Важно! |
---|
Перед тем как выполнить возврат, необходимо ознакомиться со сведениями в разделе Возврат к моментальному снимку базы данных. |
Восстановление базы данных до состояния, сохраненного в моментальном снимке
Выберите моментальный снимок базы данных, до которого ее необходимо восстановить. Просмотреть список моментальных снимков базы данных можно в среде SQL Server Management Studio (см. раздел Как просмотреть моментальный снимок базы данных (среда SQL Server Management Studio)). Также исходную базу данных представления можно задать с помощью столбца source_database_id представления каталога sys.databases (Transact-SQL).
Удалите другие моментальные снимки.
Дополнительные сведения об удалении снимков см. в разделе Как удалить моментальный снимок базы данных (Transact-SQL). Если база данных использует полную модель восстановления, перед тем как выполнять возврат, следует создать резервную копию журнала. Дополнительные сведения см. в разделе Как создать резервную копию журнала транзакций (среда SQL Server Management Studio) или Как создать резервную копию журнала транзакций при повреждении базы данных (Transact-SQL).
Выполните операцию восстановления.
Чтобы выполнить операцию восстановления базы данных-источника, необходимо обладать разрешением RESTORE DATABASE. Чтобы восстановить базу данных, необходимо ввести следующую инструкцию Transact-SQL.
RESTORE DATABASE <имя_базы_данных> FROM DATABASE_SNAPSHOT =<имя_моментального_снимка_базы_данных>
Параметр <имя_базы_данных> представляет базу данных-источник, а параметр <имя_моментального_снимка_базы_данных> задает имя моментального снимка базы данных, до которого необходимо восстановить базу данных. Обратите внимание на то, что в данной инструкции необходимо задавать имя моментального снимка, а не устройство резервного копирования.
Дополнительные сведения см. в разделе RESTORE (Transact-SQL).
Примечание. В процессе выполнения операции восстановления моментальный снимок и база данных-источник являются недоступными. База данных-источник и моментальный снимок помечаются как «Восстанавливаемый». В случае возникновения ошибки в процессе восстановления система попытается продолжить его при следующем запуске базы данных. В случае смены владельца базы данных после создания ее моментального снимка, возможно, понадобится обновить соответствующую информацию после восстановления.
Примечание. После восстановления в базе данных сохраняются разрешения и настройки (например, модель восстановления и сведения о владельце базы данных) моментального снимка базы данных. Запустите базу данных.
Кроме того, можно создать резервную копию восстанавливаемой базы данных, особенно если в ней используется полная модель восстановления или модель восстановления с неполным протоколированием. Сведения о резервном копировании базы данных см. в разделе Как создать резервную копию базы данных (среда SQL Server Management Studio) или Как создать полную резервную копию базы данных (Transact-SQL).
Пример
Данный раздел содержит примеры восстановления базы данных до состояния, соответствующего моментальному снимку.
А. Восстановление базы данных AdventureWorks до состояния моментального снимка
В этом примере предполагается наличие единственного моментального снимка базы данных AdventureWorks. Пример, с помощью которого создается моментальный снимок, используемый в данном примере, приведен в разделе Как создать моментальный снимок базы данных (Transact-SQL).
USE master;
-- Reverting AdventureWorks to AdventureWorks_dbss1800
RESTORE DATABASE AdventureWorks from
DATABASE_SNAPSHOT = 'AdventureWorks_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
См. также
Задачи
Как создать моментальный снимок базы данных (Transact-SQL)
Как удалить моментальный снимок базы данных (Transact-SQL)
Как просмотреть моментальный снимок базы данных (среда SQL Server Management Studio)
Основные понятия
Как работают моментальные снимки базы данных
Зеркальное отображение и моментальные снимки баз данных
Другие ресурсы
RESTORE (Transact-SQL)
Учебник по среде SQL Server Management Studio
sys.databases (Transact-SQL)