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


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

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

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

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

  • Перед началом работы выполните следующие действия.  

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

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

  • Восстановление базы данных SQL Server на определенный момент времени с помощью:  

    Среда SQL Server Management Studio

    Transact-SQL

Перед началом работы

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

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

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

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

Разрешения

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

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

[В начало]

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

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

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

  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 <устройство_резервного_копирования> WITH STOPAT = time**,** RECOVERY…

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

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

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

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

Пример этой процедуры см. в подразделе Примеры (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 database_name FROM backup_device 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).

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

В базе данных AdventureWorks2012 используется простая модель восстановления. Чтобы разрешить создание резервных копий журналов, перед проведением полного резервного копирования базу данных необходимо настроить на использование модели полного восстановления, выполнив инструкцию 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)