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


Рекомендации по восстановлению базы данных на определенный момент времени

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

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

Использование параметра STANDBY для поиска неизвестного момента времени

Иногда возникает необходимость в восстановлении базы данных на определенный момент времени, однако часто этот момент (номер LSN, помеченная транзакция) неизвестен. Одним из решений является добавочный накат первичного файла (и при необходимости других файлов) данных с указанием вместо WITH RECOVERY параметра WITH STANDBY **=**имя_резервного_файла. При этом база данных восстанавливается для доступа только на чтение. Это позволяет обратиться к базе данных и определить нужный момент времени. Резервный файл позволяет отменить действия, выполненные в процессе восстановления, если накат базы данных миновал нужный момент времени. Если же база данных еще не достигла указанного момента времени, то можно восстановить промежуточные резервные копии журналов с помощью параметра WITH STANDBY, указывая в каждой из инструкций восстановления один и тот же резервный файл.

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

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

Задание момента времени в начале последовательности восстановления

Последовательность восстановления состоит из одной или нескольких операций, которые выполняют перемещение данных между одним или несколькими этапами восстановления. Чем больше предоставлено сведений о конечной цели последовательности восстановления, тем меньше вероятность появления ошибок, которые могут потребовать начать ее заново. При восстановлении до определенного момента времени компонент SQL Server Database Engine полагается на сведения, определяющие цель восстановления, которая была задана в начале (и в процессе) последовательности восстановления. Если при выполнении последовательности восстановления время ожидания слишком велико, то она завершится ошибкой. Чтобы гарантировать, что процесс восстановления не будет продолжен после достижения заданного момента времени, необходимо как можно раньше определить условия останова.

Если предполагается останов в определенной точке восстановления, то необходимо задавать ее в каждой инструкции RESTORE LOG (параметрами STOPAT, STOPBEFOREMARK или STOPATMARK) вместе с параметром RECOVERY. При одновременном указании параметров RECOVERY и STOPAT, если резервная копия журналов транзакций не содержит запрашиваемого момента времени (например, если заданный момент времени находится за пределами периода времени, охватываемого журналом транзакций), выдается предупреждение об этом и база данных остается невосстановленной. После достижения точки восстановления производится восстановление базы данных, после чего делается попытка восстановить другую резервную копию журналов. Одновременное указание параметров RECOVERY и STOPAT при восстановлении резервной копии журналов гарантирует, что восстановление не будет продолжено позже заданного времени останова.

Пример. Восстановление на момент времени

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

RESTORE DATABASE database_name FROM full_backup 
    WITH NORECOVERY;
RESTORE DATABASE database_name FROM full_differential_backup 
    WITH NORECOVERY;
RESTORE LOG database_name FROM log_backup 
    WITH STOPAT = time, RECOVERY;
RESTORE LOG database_name FROM log_backup 
    WITH STOPAT = time, RECOVERY;

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

Связь значения time с промежутком времени, охватываемым резервной копией журналов Результат

Значение time соответствует времени перед охватываемым промежутком.

Восстановление завершается ошибкой, накат не производится.

Значение time лежит в пределах промежутка времени.

Последнее восстановление выполняется успешно и производится исправление базы данных.

Значение time соответствует времени после промежутка времени.

Накат успешно выполняется, но восстановление базы данных не производится, так как момент времени, заданный в параметре time, еще не наступил.

Объявление точки останова в каждой последующей инструкции RESTORE

Точка останова является характерным свойством этой инструкции и определяется параметрами STOPAT, STOPBEFOREMARK и STOPATMARK. Если в инструкции RESTORE не указать эти параметры, то производится полное восстановление резервной копии.

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

ms191468.note(ru-ru,SQL.90).gifПримечание.
Предложения STOPBEFOREMARK и STOPATMARK имеют два параметра: mark_name и lsn_number. Параметр mark_name, определяющий отметку транзакции в резервных копиях журналов, поддерживается только в инструкциях RESTORE LOG. Параметр lsn_number, задающий регистрационный номер транзакции в журнале, поддерживается и в RESTORE DATABASE, и в RESTORE LOG.

См. также

Основные понятия

Применение резервных копий журнала транзакций
Восстановление до номера LSN
Восстановление до помеченной транзакции

Другие ресурсы

RESTORE (Transact-SQL)
Восстановление базы данных на момент времени в пределах резервной копии

Справка и поддержка

Получение помощи по SQL Server 2005