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

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

В этом разделе описывается восстановление базы данных до точки во времени в SQL Server с помощью SQL Server Management Studio или Transact-SQL. Этот раздел относится только к базам данных SQL Server, используюющим полные или массовые модели восстановления.

Внимание

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

Перед началом

Рекомендации

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

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

Безопасность

Разрешения

Если восстанавливаемая база данных не существуют, для выполнения инструкции RESTORE у пользователя должны быть разрешения CREATE DATABASE. Если база данных существует, разрешения на выполнение инструкции RESTORE по умолчанию предоставлены членам предопределенных ролей сервера sysadmin и dbcreator , а также владельцу базы данных (dbo) (для параметра FROM DATABASE_SNAPSHOT база данных всегда существует).

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

Использование среды SQL Server Management Studio

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

  1. В обозреватель объектов подключитесь к соответствующему экземпляру ядро СУБД SQL Server и разверните дерево сервера.

  2. Разверните узел Базы данных. В зависимости от типа восстанавливаемой базы данных выберите пользовательскую базу данных или раскройте узел Системные базы данныхи выберите системную базу данных.

  3. Щелкните правой кнопкой мыши базу данных, выберите пункт Задачи, затем пункт Восстановитьи пункт База данных.

  4. Чтобы указать источник и расположение восстанавливаемых резервных наборов данных, используйте страницу Общие , раздел Источник . Выберите один из следующих параметров.

    • База данных

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

    Примечание.

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

    • Устройство

      Нажмите кнопку обзора (...), после чего откроется диалоговое окно Выбор устройств резервного копирования . В окне Тип носителя резервной копии выберите один из перечисленных типов устройств. Чтобы выбрать одно или несколько устройств в окне Носитель резервной копии , нажмите кнопку Добавить.

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

      В списке Источник: Устройство: База данных выберите имя базы данных, которую нужно восстановить.

      Примечание. Этот список доступен, только если выбрано Устройство . Будут выбраны только те базы данных, резервные копии которых доступны на выбранном устройстве.

  5. В разделе Назначение , в поле База данных автоматически появится имя базы данных для восстановления. Для изменения имени базы данных введите новое имя в окно База данных .

  6. Щелкните Временная шкала для получения доступа в диалоговое окно Временная шкала резервного копирования .

  7. В разделе Восстановить на щелкните Конкретные дата и время.

  8. Вы можете использовать окна Данные и Время или пользоваться ползунком, чтобы указать конкретные дату и время, при которых процесс восстановления должен закончиться. Нажмите ОК.

    Примечание.

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

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

    Сведения о столбцах в наборах резервных копий для восстановления сетки см. в разделе "Восстановление базы данных (общая страница)". Дополнительные сведения о помощнике по восстановлению базы данных см. в разделе "Обзор восстановления и восстановления" (SQL Server).

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

    • Перезаписать существующую базу данных (WITH REPLACE)

    • Сохранить параметры репликации (WITH KEEP_REPLICATION)

    • Ограничить доступ к восстановленной базе данных (WITH RESTRICTED_USER)

    Дополнительные сведения об этих параметрах см. в разделе "Восстановление базы данных (страница параметров)".

  11. Выберите параметр в поле Состояние восстановления . В данном окне определяется состояние базы данных после операции восстановления.

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

    • СхемаRESTORE WITH NORECOVERY оставляет базу данных в нерабочем состоянии и не выполняет откат незафиксированных транзакций. Можно восстановить дополнительные журналы транзакций. База данных не может быть использована, пока не будет восстановлена.

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

    Описание параметров см. в разделе "Восстановление базы данных (страница параметров)".

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

  13. Если имеются активные соединения с базой данных, то операция восстановления может завершиться ошибкой. Проверьте параметр "Закрыть существующие подключения", чтобы убедиться, что все активные подключения между Management Studio и базой данных закрыты. Этот параметр переводит базу данных в однопользовательский режим перед началом выполнения процедуры восстановления, а затем возвращает в многопользовательский режим после ее завершения.

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

Использование Transact-SQL

Подготовка к работе

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

Чтобы облегчить выбор резервной копии базы данных для восстановления, можно указать в инструкции RESTORE DATABASE предложение WITH STOPAT, которое вызовет ошибку, если данные резервной копии являются слишком новыми для указанного целевого времени. Резервная копия базы данных восстанавливается полностью, даже если она содержит целевое время.

Базовый синтаксис Transact-SQL

RESTORE LOG database_name FROM <backup_device> WITH STOPAT= TIME, RECOVERY...

Точка восстановления является самой последней фиксацией транзакции, которая произошла во время или до значения datetime , определенного параметром time.

Чтобы восстановить только изменения до определенного момента времени, для каждой восстанавливаемой резервной копии укажите WITH STOPAT = время. Это гарантирует, что конечное время не будет пропущено.

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

Примечание.

Пример этой процедуры см. в подразделе Примеры (Transact-SQL)далее в этом разделе.

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

  2. Выполните инструкцию RESTORE DATABASE с параметром NORECOVERY.

    Примечание.

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

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

  4. Примените каждую резервную копию журнала транзакций в той же последовательности, в которой они были созданы, указав время остановки восстановления журнала (RESTORE DATABASE database_name FROM <backup_device> WITH STOPAT = time , RECOVERY).

    Примечание.

    Параметры RECOVERY и STOPAT. Если в резервной копии журнала транзакций не содержится требуемое время (например, если указанное время выходит за рамки времени, отраженного в журнале транзакций), создается предупреждение и база данных остается невосстановленной.

Пример (Transact-SQL)

В следующем примере база данных восстанавливается в состояние на 12:00 AMApril 15, 2020 и демонстрируется операция восстановления, использующая несколько резервных копий журналов. На устройстве резервного копирования AdventureWorksBackups полная резервная копия базы данных, подлежащей восстановлению, — это третий резервный набор данных на устройстве (FILE = 3), резервная копия первого журнала — это четвертый резервный набор (FILE = 4), резервная копия второго журнала — это пятый резервный набор (FILE = 5).

Внимание

В базе данных AdventureWorks2022 используется простая модель восстановления. Чтобы разрешить создание резервных копий журналов, перед проведением полного резервного копирования базу данных необходимо настроить на использование модели полного восстановления, выполнив инструкцию ALTER DATABASE AdventureWorks SET RECOVERY FULL.

RESTORE DATABASE AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=3, NORECOVERY;  
  
RESTORE LOG AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=4, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';  
  
RESTORE LOG AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=5, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';  
RESTORE DATABASE AdventureWorks WITH RECOVERY;   
GO  
  

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

См. также

backupset (Transact-SQL)
RESTORE (Transact-SQL)
RESTORE HEADERONLY (Transact-SQL)