Основные сведения о восстановлении из резервных копий и по журналам в SQL Server

 Сведения, содержащиеся в этом разделе, относятся ко всем базам данных SQL Server.

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

Набор данных наката

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

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

Если при восстановлении определена файловая группа, то оно производится для всей файловой группы целиком, в том числе для всех файлов, добавленных к этой файловой группе с момента создания резервной копии. Дополнительные сведения см. в разделе Контролирование создания добавленных файлов во время наката.

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

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

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

Последовательности восстановления

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

Дополнительные сведения о последовательностях восстановления Transact-SQL и о способах построения этих последовательностей см. в разделе Работа с последовательностями восстановления для баз данных SQL Server.

Стадии восстановления

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

  • На стадии копирования данных производится копирование всех страниц данных, журнала и индекса с резервного носителя в файлы базы данных.

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

  • Стадия отката, которая является первым этапом восстановления, производит откат незафиксированных транзакций и делает базу данных доступной для пользователей. После завершения стадии отката восстановление последующих резервных копий становится невозможным.

В оставшейся части этого раздела перечисленные стадии рассмотрены более подробно.

Стадия копирования данных

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

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

Файл или страница в наборе данных наката, имеющие наибольший возраст, определяют исходную точку следующей стадии — повтора (наката).

Стадия повтора (накат)

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

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

Точка восстановления

Целью наката является возврат данных в исходное состояние в точке восстановления. Точка восстановления — это момент времени, до которого пользователь желает восстановить данные. В модели полного восстановления в качестве точки восстановления можно указать определенный момент времени, помеченную транзакцию или регистрационный номер транзакции в журнале. В модели восстановления с неполным протоколированием восстановление на момент времени можно выполнить только в том случае, если с момента предыдущего резервного копирования журнала не выполнялось никаких массовых операций.

Согласованность повтора

На стадии повтора всегда выполняется накат данных до точки, согласованной для повтора с состоянием базы данных в точке восстановления. Все данные накатываются вперед до точки, в которой может произойти откат.

Состояние базы данных определяется первичным файлом следующим образом:

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

  • если первичный файл не восстанавливается, то состояние базы данных известно и накат восстановленных данных производится до точки восстановления, согласованной с базой данных. SQL Server выполняет это действие принудительно.

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

Восстановление из разностной резервной копии начинается с момента, когда она была создана. Страницы набора данных наката переписываются более поздними страницами из разностной резервной копии.

Стадия отката и восстановление

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

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

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

В процессе восстановления после сбоя или после перехода на другой ресурс при зеркальном отображении SQL Server 2005 Enterprise Edition и более поздних версий дает пользователям возможность во время стадии отката производить доступ к базе данных. Это также называется быстрым восстановлением. Быстрое восстановление возможно потому, что транзакции, не зафиксированные на момент сбоя, повторно получают все блокировки, которые они удерживали перед сбоем. При откате транзакций эти блокировки защищают транзакции от вмешательства пользователей.

Связь параметров RECOVERY и NORECOVERY со стадиями восстановления

Выполнение инструкции RESTORE после стадии повтора либо завершается, либо переходит к стадии отката в зависимости от того, указано ли в ней предложение WITH NORECOVERY.

  • Режим WITH RECOVERY включает и стадию повтора, и стадию отката и восстанавливает базу данных. Более поздние резервные копии восстановить невозможно. Это значение по умолчанию.

    Если набор данных наката не был восстановлен в достаточной степени, чтобы обеспечить согласованность с базой данных, стадия отката выполнена быть не может. Компонент Database Engine выдает ошибку и прекращает восстановление.

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

  • Предложение WITH NORECOVERY позволяет пропустить стадию отката, чтобы сохранить незафиксированные транзакции. Пропуск стадии отката позволяет восстановить другие резервные копии, чтобы выполнить накат базы данных на более поздний момент времени. Иногда инструкция RESTORE WITH NORECOVERY выполняет накат данных до момента, пока они не будут согласованы с базой данных. В таких случаях компонент Database Engine выдает информационное сообщение, указывающее, что набор данных наката теперь можно восстановить при помощи параметра RECOVERY.

    Дополнительные сведения о наборах данных наката см. в разделе Основные сведения о восстановлении из резервных копий и по журналам в SQL Server.

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

Третий вариант, WITH STANDBY, в этом подразделе не рассматривается.

Подробное описание параметров инструкции RESTORE см. в разделе RESTORE (Transact-SQL).

Пути восстановления

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