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

Применимо к: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)