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


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

Область применения: SQL Server

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

При работе в режиме модели полного восстановления после восстановления резервных копий данных необходимо восстановить все последующие резервные копии журнала транзакций, а затем саму базу данных. Базу данных можно восстановить до определенной точки восстановления в одной из этих резервных копий журналов. Этой точкой восстановления может быть заданная дата и время, помеченная транзакция или регистрационный номер транзакции в журнале (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)". До создания резервной копии базы данных образец базы данных AdventureWorks2022 был настроен на использование модели полного восстановления.

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

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

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

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

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

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

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

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

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

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

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

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

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

  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)
Общие сведения о резервном копировании (SQL Server)
Обзор процессов восстановления (SQL Server)