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

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

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

Иногда возникает необходимость в восстановлении базы данных на определенный момент времени, однако этот момент (т. е. оптимальная точка восстановления) точно неизвестен. Чтобы найти эту точку восстановления, можно использовать инструкцию RESTORE … WITH STANDBY **=**standby_file_name вместе с предложением STOPAT, целевое время которого предшествует искомой точке восстановления. Операция восстановления STANDBY восстанавливает базу данных с доступом только для чтения, позволяя просматривать базу данных в поисках оптимальной точки восстановления.

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

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

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

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

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

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

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

Если последовательность частичного восстановления исключает любые файловые группы FILESTREAM, восстановление на момент времени не поддерживается. Можно принудительно продолжить последовательность восстановления. Тем не менее файловые группы FILESTREAM, не вошедшие в инструкцию RESTORE, больше невозможно восстановить. Для принудительного продолжения восстановления на момент времени укажите параметр CONTINUE_AFTER_ERROR вместе с параметром STOPAT, STOPATMARK или STOPBEFOREMARK, который также необходимо указать в своих последующих инструкциях RESTORE LOG. Если указать параметр CONTINUE_AFTER_ERROR, выполняется частичная последовательность восстановления, а файловая группа FILESTREAM становится невосстановимой.

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

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

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.

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

Предложения STOPBEFOREMARK и STOPATMARK имеют два параметра: mark_name и lsn_number. Параметр mark_name, определяющий отметку транзакции в резервных копиях журналов, поддерживается только в инструкциях RESTORE LOG. Параметр lsn_number, задающий регистрационный номер транзакции в журнале, поддерживается и в RESTORE DATABASE, и в RESTORE LOG.

Журнал изменений

Обновленное содержимое

Исправлен раздел «Использование параметра STANDBY для поиска неизвестного момента времени» в целях разъяснения того, что предложение WITH STANDBY позволяет только отменить указанные эффекты процесса восстановления.