Восстановление базы данных SQL Server до определенного момента времени (модель полного восстановления)Restore a SQL Server Database to a Point in Time (Full Recovery Model)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server нетБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

В данном разделе содержатся инструкции по восстановлению базы данных на определенный момент времени в SQL Server 2017SQL Server 2017 при помощи SQL Server Management StudioSQL Server Management Studio или Transact-SQLTransact-SQL.This topic describes how to restore a database to a point in time in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. Сведения в этом разделе относятся только к тем базам данных SQL ServerSQL Server , которые используют полную модель восстановления или модель восстановления с неполным протоколированием.This topic is relevant only for SQL ServerSQL Server databases that use the full or bulk-logged recovery models.

Важно!

Если в модели восстановления с неполным протоколированием резервная копия журнала содержит изменения с неполным протоколированием, то в пределах этой резервной копии восстановление до момента времени невозможно.Under the bulk-logged recovery model, if a log backup contains bulk-logged changes, point-in-time recovery is not possible to a point within that backup. База данных должна быть восстановлена к концу резервной копии журнала транзакций.The database must be recovered to the end of the transaction log backup.

Перед началомBefore You Begin

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

  • Используйте параметр STANDBY для поиска неизвестного момента времени.Use STANDBY to find unknown point in time.

  • Задайте момент времени в начале последовательности восстановленияSpecify the point in time early in a restore sequence

безопасностьSecurity

PermissionsPermissions

Если восстанавливаемая база данных не существуют, для выполнения инструкции RESTORE у пользователя должны быть разрешения CREATE DATABASE.If the database being restored does not exist, the user must have CREATE DATABASE permissions to be able to execute RESTORE. Если база данных существует, разрешения на выполнение инструкции RESTORE по умолчанию предоставлены членам предопределенных ролей сервера sysadmin и dbcreator , а также владельцу базы данных (dbo) (для параметра FROM DATABASE_SNAPSHOT база данных всегда существует).If the database exists, RESTORE permissions default to members of the sysadmin and dbcreator fixed server roles and the owner (dbo) of the database (for the FROM DATABASE_SNAPSHOT option, the database always exists).

Разрешения на выполнение инструкции RESTORE даются ролям, в которых данные о членстве всегда доступны серверу.RESTORE permissions are given to roles in which membership information is always readily available to the server. Так как членство в предопределенной роли базы данных может быть проверено только тогда, когда база данных доступна и не повреждена, что не всегда имеет место при выполнении инструкции RESTORE, члены предопределенной роли базы данных db_owner не имеют разрешений RESTORE.Because fixed database role membership can be checked only when the database is accessible and undamaged, which is not always the case when RESTORE is executed, members of the db_owner fixed database role do not have RESTORE permissions.

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

Восстановление базы данных на момент времениTo restore a database to a point in time

  1. В обозревателе объектов подключитесь к соответствующему экземпляру Компонент SQL Server Database EngineSQL Server Database Engineи разверните дерево сервера.In Object Explorer, connect to the appropriate instance of the Компонент SQL Server Database EngineSQL Server Database Engine, and expand the server tree.

  2. Разверните узел Базы данных.Expand Databases. В зависимости от типа восстанавливаемой базы данных выберите пользовательскую базу данных или раскройте узел Системные базы данныхи выберите системную базу данных.Depending on the database, either select a user database or expand System Databases, and then select a system database.

  3. Щелкните правой кнопкой мыши базу данных, выберите пункт Задачи, затем пункт Восстановитьи пункт База данных.Right-click the database, point to Tasks, point to Restore, and then click Database.

  4. Чтобы указать источник и расположение восстанавливаемых резервных наборов данных, используйте страницу Общие , раздел Источник .On the General page, use the Source section to specify the source and location of the backup sets to restore. Выберите один из следующих вариантов.Select one of the following options:

    • База данныхDatabase

      Выберите из раскрывающегося списка базу данных для восстановления.Select the database to restore from the drop-down list. Данный список содержит только базы данных, резервное копирование которых было выполнено в соответствии с журналом резервного копирования msdb .The list contains only databases that have been backed up according to the msdb backup history.

    Примечание

    Если резервная копия была получена с другого сервера, на целевом сервере не будет журнала резервного копирования для указанной базы данных.If the backup is taken from a different server, the destination server will not have the backup history information for the specified database. В этом случае щелкните пункт Устройство , чтобы вручную указать файл или устройство для восстановления.In this case, select Device to manually specify the file or device to restore.

    • УстройствоDevice

      Нажмите кнопку обзора ( ... ), после чего откроется диалоговое окно Выбор устройств резервного копирования .Click the browse (...) button to open the Select backup devices dialog box. В окне Тип носителя резервной копии выберите один из перечисленных типов устройств.In the Backup media type box, select one of the listed device types. Чтобы выбрать одно или несколько устройств в окне Носитель резервной копии , нажмите кнопку Добавить.To select one or more devices for the Backup media box, click Add.

      После добавления нужных устройств в списке Носитель резервной копии нажмите кнопку ОК для возвращения на страницу Общие .After you add the devices you want to the Backup media list box, click OK to return to the General page.

      В списке Источник: Устройство: База данных выберите имя базы данных, из которой нужно восстановить резервные копии.In the Source: Device: Database list box, select the name of the database which should be restored.

      Примечание. Этот список доступен, только если выбрано Устройство .Note This list is only available when Device is selected. Будут выбраны только те базы данных, резервные копии которых доступны на выбранном устройстве.Only databases that have backups on the selected device will be available.

  5. В разделе Назначение , в поле База данных автоматически появится имя базы данных для восстановления.In the Destination section, the Database box is automatically populated with the name of the database to be restored. Для изменения имени базы данных введите новое имя в окно База данных .To change the name of the database, enter the new name in the Database box.

  6. Щелкните Временная шкала для получения доступа в диалоговое окно Временная шкала резервного копирования .Click Timeline to access the Backup Timeline dialog box.

  7. В разделе Восстановить на щелкните Конкретные дата и время.In the Restore to section, click Specific date and time.

  8. Вы можете использовать окна Данные и Время или пользоваться ползунком, чтобы указать конкретные дату и время, при которых процесс восстановления должен закончиться.Use either the Date and Time boxes or the slider bar to specify a specific date and time to where the restore should stop. Нажмите кнопку ОК.Click OK.

    Примечание

    Используйте поле Интервал временной шкалы для изменения количества времени, отображаемого на временной шкале.Use the Timeline Interval box to change the amount of time displayed on the timeline.

  9. После указания определенного момента времени помощник по восстановлению базы данных сделает так, что в столбце Восстановление сетки Резервные наборы данных для восстановления будут выбраны только необходимые для восстановления к указанному моменту времени резервные копии.After you have specified a specific point in time, the Database Recovery Advisor ensures that only backups that are required for restoring to that point in time are selected in the Restore column of the Backup sets to restore grid. Эти выбранные резервные копии составляют рекомендованный план восстановления для данного восстановления на момент времени.These selected backups make up the recommended restore plan for your point-in-time restore. Следует использовать только выбранные резервные копии для операции восстановления на момент времени.You should use only the selected backups for your point-in-time restore operation.

    Дополнительные сведения о столбцах сетки Резервные наборы данных для восстановления см. в статье Восстановление базы данных (страница "Общие").For information about the columns in the Backup sets to restore grid, see Restore Database (General Page). Сведения о помощнике по восстановлению базы данных см. в статье Обзор процессов восстановления (SQL Server).For information about the Database Recovery Advisor, see Restore and Recovery Overview (SQL Server).

  10. На странице Параметры используйте панель Параметры восстановления для выбора любого из следующих вариантов, если он подходит к данной ситуации.On the Options page, in the Restore options panel, you can select any of the following options, if appropriate for your situation:

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

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

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

    Дополнительные сведения об этих параметрах см. в статье Восстановление базы данных (страница "Параметры").For more information about these options, see Restore Database (Options Page).

  11. Выберите параметр в поле Состояние восстановления .Select an option for the Recovery state box. В данном окне определяется состояние базы данных после операции восстановления.This box determines the state of the database after the restore operation.

    • По умолчанию установлена схемаRESTORE WITH RECOVERY , при этом база данных находится в готовом состоянии для использования путем отката незафиксированных транзакций.RESTORE WITH RECOVERY is the default behavior which leaves the database ready for use by rolling back the uncommitted transactions. Невозможно восстановить дополнительные журналы транзакций.Additional transaction logs cannot be restored. Выберите данный параметр, если выполняется восстановление всех необходимых резервных копий.Select this option if you are restoring all of the necessary backups now.

    • СхемаRESTORE WITH NORECOVERY оставляет базу данных в нерабочем состоянии и не выполняет откат незафиксированных транзакций.RESTORE WITH NORECOVERY which leaves the database non-operational, and does not roll back the uncommitted transactions. Можно восстановить дополнительные журналы транзакций.Additional transaction logs can be restored. База данных не может быть использована, пока не будет восстановлена.The database cannot be used until it is recovered.

    • СхемаRESTORE WITH STANDBY оставляет базу данных в режиме только для чтения.RESTORE WITH STANDBY which leaves the database in read-only mode. С помощью данного параметра можно отменить незафиксированные транзакции и сохранить отмененные действия в резервном файле, чтобы результаты восстановления можно было отменить.It undoes uncommitted transactions, but saves the undo actions in a standby file so that recovery effects can be reverted.

    Описание параметров см. в статье Восстановление базы данных (страница "Параметры").For descriptions of the options, see Restore Database (Options Page).

  12. Настройка Создать резервную копию заключительного фрагмента журнала перед восстановлением будет выбрана, если это необходимо для указанного вами момента времени.Take tail-log backup before restore will be selected if it is necessary for the point in time that you have selected. Нет необходимости изменять данную настройку, однако вы можете выбрать резервное копирование заключительного фрагмента журнала, даже если выполнение этого не требуется.You do not need to modify this setting, but you can choose to backup the tail of the log even if it is not required.

  13. Если имеются активные соединения с базой данных, то операция восстановления может завершиться ошибкой.Restore operations may fail if there are active connections to the database. Проверьте окно Закрыть существующие соединения и убедитесь, что все активные соединения между Среда Management StudioManagement Studio и базой данных закрыты.Check the Close existing connections option to ensure that all active connections between Среда Management StudioManagement Studio and the database are closed. Этот параметр переводит базу данных в однопользовательский режим перед началом выполнения процедуры восстановления, а затем возвращает в многопользовательский режим после ее завершения.This check box sets the database to single user mode before performing the restore operations, and sets the database to multi-user mode when complete.

  14. Установите флажок Выдавать запрос перед восстановлением каждой резервной копии , если хотите отследить каждую операцию восстановления.Select Prompt before restoring each backup if you wish to be prompted between each restore operation. Обычно это не требуется, за исключением случаев, если необходимо наблюдать за состоянием операции восстановления базы данных большого объема.This is not usually necessary unless the database is large and you wish to monitor the status of the restore operation.

Мы слушаем! Если вы обнаружили в этой статье устаревшие или недостоверные сведения, например инструкции или пример кода, сообщите нам.We are listening: If you find something outdated or incorrect in this article, such as a step or a code example, please tell us. Можно воспользоваться кнопкой Эта страница в разделе Отзывы внизу страницы.You can click the This page button in the Feedback section at the bottom of this page. Обычно мы читаем отзывы про материалы по SQL на следующий день.We read every item of feedback about SQL, typically the next day. Благодарим вас.Thanks.

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

Before you beginBefore you begin

Восстановление на момент времени всегда производится из резервной копии журналов.A specified time is always restored from a log backup. В каждой инструкции RESTORE LOG последовательности восстановления необходимо указать целевое время или транзакцию в идентичном предложении STOPAT.In every RESTORE LOG statement of the restore sequence, you must specify your target time or transaction in an identical STOPAT clause. В качестве предварительного условия для восстановления на момент времени необходимо сначала восстановить полную резервную копию базы данных, чья конечная точка предшествует моменту времени восстановления.As a prerequisite to a point-in-time restore, you must first restore a full database backup whose end point is earlier than your target restore time. Эта полная резервная копия базы данных может быть старше самой последней полной резервной копии базы данных, поскольку затем восстанавливается каждая последующая резервная копия журналов, вплоть до резервной копии журналов, содержащей целевой момент времени.That full database backup can be older than the most recent full database backup as long as you then restore every subsequent log backup, up to and including the log backup that contains your target point in time.

Чтобы облегчить выбор резервной копии базы данных для восстановления, можно указать в инструкции RESTORE DATABASE предложение WITH STOPAT, которое вызовет ошибку, если данные резервной копии являются слишком новыми для указанного целевого времени.To help you identify which database backup to restore, you can optionally specify your WITH STOPAT clause in your RESTORE DATABASE statement to raise an error if a data backup is too recent for the specified target time. Резервная копия базы данных восстанавливается полностью, даже если она содержит целевое время.The complete data backup is always restored, even if it contains the target time.

Основной синтаксис Transact-SQLTransact-SQLBasic Transact-SQLTransact-SQL syntax

RESTORE LOG имя_базы_данных FROM <устройство_резервного_копирования> WITH STOPAT = time , RECOVERY...RESTORE LOG database_name FROM <backup_device> WITH STOPAT =time, RECOVERY...

Точка восстановления является самой последней фиксацией транзакции, которая произошла во время или до значения datetime , определенного параметром time.The recovery point is the latest transaction commit that occurred at or before the datetime value that is specified by time.

Чтобы восстановить только изменения до определенного момента времени, для каждой восстанавливаемой резервной копии укажите WITH STOPAT = time .To restore only the modifications that were made before a specific point in time, specify WITH STOPAT = time for each backup you restore. Это гарантирует, что конечное время не будет пропущено.This makes sure that you do not go past the target time.

Восстановление базы данных на момент времениTo restore a database to a point in time

Примечание

Пример этой процедуры см. в подразделе Примеры (Transact-SQL)далее в этом разделе.For an example of this procedure, see Example (Transact-SQL), later in this section.

  1. Подключитесь к экземпляру сервера, на который необходимо восстановить базу данных.Connect to server instance on which you want to restore the database.

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

    Примечание

    Если последовательность частичного восстановления исключает любые файловые группы FILESTREAM , восстановление на момент времени не поддерживается.If a partial restore sequence excludes any FILESTREAM filegroup, point-in-time restore is not supported. Можно принудительно продолжить последовательность восстановления.You can force the restore sequence to continue. Тем не менее файловые группы FILESTREAM, не вошедшие в инструкцию RESTORE, больше невозможно восстановить.However the FILESTREAM filegroups that are omitted from your RESTORE statement can never be restored. Для принудительного продолжения восстановления на момент времени укажите параметр CONTINUE_AFTER_ERROR вместе с параметром STOPAT, STOPATMARK или STOPBEFOREMARK, который также необходимо указать в своих последующих инструкциях RESTORE LOG.To force a point-in-time restore, specify the CONTINUE_AFTER_ERROR option together with the STOPAT, STOPATMARK, or STOPBEFOREMARK option, which you must also specify in your subsequent RESTORE LOG statements. Если указать параметр CONTINUE_AFTER_ERROR, выполняется последовательность частичного восстановления, а файловая группа FILESTREAM становится невосстановимой.If you specify CONTINUE_AFTER_ERROR, the partial restore sequence succeeds and the FILESTREAM filegroup becomes unrecoverable.

  3. Восстановите последнюю разностную резервную копию, если таковая имеется, без восстановления базы данных (RESTORE DATABASE имя_базы_данных FROM устройство_резервного_копирования WITH NORECOVERY).Restore the last differential database backup, if any, without recovering the database (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY).

  4. Восстановите каждую резервную копию журнала транзакций в той же последовательности, в которой они были созданы, указывая время, с которого необходимо остановить восстановление журнала (RESTORE DATABASE имя_базы_данных FROM <устройство_резервного_копирования> WITH STOPAT = time , RECOVERY).Apply each transaction log backup in the same sequence in which they were created, specifying the time at which you intend to stop restoring log (RESTORE DATABASE database_name FROM <backup_device> WITH STOPAT**=time,** RECOVERY).

    Примечание

    Параметры RECOVERY и STOPAT.The RECOVERY and STOPAT options. Если в резервной копии журнала транзакций не содержится требуемое время (например, если указанное время выходит за рамки времени, отраженного в журнале транзакций), создается предупреждение и база данных остается невосстановленной.If the transaction log backup does not contain the requested time (for example, if the time specified is beyond the end of the time covered by the transaction log), a warning is generated and the database remains unrecovered.

Примеры (Transact-SQL)Example (Transact-SQL)

В следующем примере база данных восстанавливается в состояние на 12:00 AM``April 15, 2020 и демонстрируется операция восстановления, использующая несколько резервных копий журналов.The following example restores a database to its state as of 12:00 AM on April 15, 2020 and shows a restore operation that involves multiple log backups. На устройстве резервного копирования AdventureWorksBackups полная резервная копия базы данных, подлежащей восстановлению, — это третий резервный набор данных на устройстве (FILE = 3), резервная копия первого журнала — это четвертый резервный набор (FILE = 4), резервная копия второго журнала — это пятый резервный набор (FILE = 5).On the backup device, AdventureWorksBackups, the full database backup to be restored is the third backup set on the device (FILE = 3), the first log backup is the fourth backup set (FILE = 4), and the second log backup is the fifth backup set (FILE = 5).

Важно!

В базе данных AdventureWorks2012AdventureWorks2012 используется простая модель восстановления.The AdventureWorks2012AdventureWorks2012 database uses the simple recovery model. Чтобы разрешить создание резервных копий журналов, перед проведением полного резервного копирования базу данных необходимо настроить на использование модели полного восстановления, выполнив инструкцию ALTER DATABASE AdventureWorks SET RECOVERY FULL.To permit log backups, before taking a full database backup, the database was set to use the full recovery model, using 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  
  

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

См. также:See Also

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