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


Выполнение полного восстановления базы данных (модель полного восстановления)

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

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

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

Важно!

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

В этом разделе.

Примечание

Сведения о поддержке резервных копий более ранних версий SQL Server см. в подразделе "Поддержка совместимости" раздела RESTORE (Transact-SQL).

Восстановление базы данных до точки сбоя

Обычно восстановление базы данных до точки сбоя включает следующие основные шаги:

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

    Важно!

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

    Дополнительные сведения см. в разделе Резервные копии заключительного фрагмента журнала (SQL Server).

  2. Восстановите самую последнюю полную резервную копию базы данных без восстановления самой базы данных (RESTORE DATABASE имя_базы_данных FROM устройство_резервного_копирования WITH NORECOVERY).

  3. Если существуют разностные резервные копии, восстановите самую последнюю из них без восстановления базы данных (RESTORE DATABASE имя_базы_данных FROM устройство_разностного_резервного_копирования WITH NORECOVERY).

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

  4. Начиная с первой резервной копии журнала транзакций, созданной после только что восстановленной резервной копии, последовательно восстановите журналы с параметром NORECOVERY.

  5. Восстановите базу данных (RESTORE DATABASE имя_базы_данных WITH RECOVERY). Этот шаг можно объединить с восстановлением последней резервной копии журнала.

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

Завершение восстановления базы данных до момента сбоя

Примечание

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

Базовый синтаксис инструкции Transact-SQL RESTORE

Ниже приведен основной синтаксис RESTORETransact-SQL для последовательности восстановления, показанной на предыдущем рисунке.

  1. RESTORE DATABASE база_данных FROM full database backup WITH NORECOVERY;

  2. RESTORE DATABASE база_данных FROM полная_разностная_резервная_копия WITH NORECOVERY;

  3. RESTORE LOG база_данных FROM резервная_копия_журнала WITH NORECOVERY;

    Повторите шаг по восстановлению журнала из резервной копии для каждой резервной копии журнала.

  4. RESTORE DATABASE база_данных WITH RECOVERY;

Пример. Восстановление до точки сбоя (Transact-SQL)

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

Примечание

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

USE master;  
--Create tail-log backup.  
BACKUP LOG AdventureWorks2012   
TO DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'    
   WITH NORECOVERY;   
GO  
--Restore the full database backup (from backup set 1).  
RESTORE DATABASE AdventureWorks2012   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'   
  WITH FILE=1,   
    NORECOVERY;  
  
--Restore the regular log backup (from backup set 2).  
RESTORE LOG AdventureWorks2012   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'   
  WITH FILE=2,   
    NORECOVERY;  
  
--Restore the tail-log backup (from backup set 3).  
RESTORE LOG AdventureWorks2012   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'  
  WITH FILE=3,   
    NORECOVERY;  
GO  
--recover the database:  
RESTORE DATABASE AdventureWorks2012 WITH RECOVERY;  
GO  

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

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

Образцы сценариев восстановления на определенный момент времени

В следующем примере предполагается использование критически важной системы баз данных, в которой полная резервная копия баз данных создается ежедневно в полночь, разностная резервная копия — каждый час, с понедельника до субботы. Резервные копии журнала создаются каждые 10 минут в течение дня. Чтобы восстановить базу данных до состояния, в котором она находилась в среду в 5 часов 19 минут утра, необходимо выполнить следующие действия.

  1. Восстановить полную резервную копию базы данных, полученную в полночь вторника.

  2. Восстановить разностную резервную копию базы данных, полученную в 5 часов утра в среду.

  3. Применить резервную копию журнала транзакций, полученную в 5 часов 10 минут утра в среду.

  4. Применить резервную копию журнала транзакций, полученную в 5 часов 20 минут утра в среду, указав, что процесс восстановления касается лишь тех транзакций, которые имели место до 5 часов 19 минут утра.

Если требуется восстановить базу данных до состояния, в котором она находилась в четверг в 3 часа 04 минуты утра, но разностная резервная копия базы данных, снятая в четверг в 3 часа 00 минут утра, при этом недоступна, необходимо выполнить следующие действия.

  1. Восстановить резервную копию базы данных, полученную в полночь в среду.

  2. Восстановить разностную резервную копию базы данных, полученную в четверг в 2 часа утра.

  3. Применить все резервные копии журнала транзакций, созданные в четверг с 2 часов 10 минут до 3 часов утра.

  4. Применить резервную копию журнала транзакций, созданную в четверг в 3 часа 10 минут утра, указав при этом, что процесс восстановления прекращается в 3 часа 04 минуты утра.

Примечание

Пример восстановления на определенный момент времени см. в статье Восстановление базы данных SQL Server до точки во времени (модель полного восстановления).

Связанные задачи

Восстановление полной резервной копии базы данных

Восстановление разностной резервной копии базы данных

Восстановление резервной копии журнала транзакций

Восстановление резервной копии с помощью управляющих объектов SQL Server (SMO)

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

См. также:

RESTORE (Transact-SQL)
BACKUP (Transact-SQL)
Применение резервных копий журналов транзакций (SQL Server)
sp_addumpdevice (Transact-SQL)
Полные резервные копии баз данных (SQL Server)
Разностные резервные копии (SQL Server)
Backup Overview (SQL Server)
Обзор процессов восстановления (SQL Server)