Как восстановить базу данных в новое место с новым именем (Transact-SQL)

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

Предварительные условия и рекомендации

  • Чтобы восстановить зашифрованную базу данных, необходимо иметь доступ к сертификату или асимметричному ключу, который использовался для шифрования базы данных. Без сертификата или асимметричного ключа восстановить базу данных нельзя. Поэтому сертификат, который используется для шифрования ключа шифрования базы данных, необходимо сохранять столько времени, сколько будет нужна база данных. Дополнительные сведения см. в разделе Сертификаты SQL Server и асимметричные ключи.

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

Уровень совместимости баз данных после обновления

После обновления базы данных tempdb, model, msdb и Resource получают уровень совместимости 100. Системная база данных master сохраняет уровень совместимости, существовавший до обновления, кроме тех случаев, когда этот уровень был ниже 80. Если перед обновлением уровень совместимости master был менее 80, то после обновления он устанавливается в значение 80.

Если уровень совместимости пользовательской базы данных до обновления был 80 или 90, он остается неизменным. Если уровень совместимости до обновления был 70 или меньше, то в обновленной базе данных он устанавливается на 80, что является самым низким поддерживаемым уровнем совместимости в SQL Server 2008.

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

Новые пользовательские базы данных наследуют уровень совместимости базы данных model.

Процедуры

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

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

    RESTORE FILELISTONLY FROM <backup_device> WITH FILE = backup_set_file_number

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

    Значение backup_set_file_number резервного набора данных можно получить с помощью инструкции RESTORE HEADERONLY.

    Эта инструкция также поддерживает некоторые параметры WITH. Дополнительные сведения см. в разделе Инструкция RESTORE FILELISTONLY (Transact-SQL).

  2. Используйте инструкцию RESTORE DATABASE для восстановления полной резервной копии базы данных. По умолчанию файлы данных и журналов восстанавливаются в исходных местоположениях. При перемещении базы данных используйте параметр MOVE, чтобы переместить каждый файл базы данных и избежать конфликтов с существующими файлами.

    Базовый синтаксис Transact-SQL для восстановления базы данных в новом месте и с новым именем:

    RESTORE DATABASE new_database_name

    FROM backup_device [ ,...n ]

    [ WITH

       {

            [ RECOVERY | NORECOVERY ]

       [ , ] [ FILE ={ backup_set_file_number | @backup_set_file_number } ]

       [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' [ ,...n ]

       }

    ;

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

    При подготовке к перемещению базы данных на другой диск необходимо проверить наличие достаточного места и определить потенциальные конфликты с существующими файлами. Это включает использование инструкции RESTORE VERIFYONLY, указывающей те же параметры MOVE, которые планируется использовать в инструкции RESTORE DATABASE.

    В следующей таблице аргументы инструкции RESTORE описаны применительно к восстановлению базы данных в новом месте. Дополнительные сведения об этих аргументах см. в разделе RESTORE (Transact-SQL).

    • new_database_name
      Новое имя базы данных.

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

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

    • backup_device [ ,...n ]
      Указывает список с разделителями-запятыми от 1 до 64 устройств резервного копирования, используемых для восстановления базы данных из резервной копии. Можно указать как физическое устройство резервного копирования, так и соответствующее логическое устройство, если оно определено. Чтобы указать физическое устройство резервного копирования, используйте параметры DISK или TAPE.

      { DISK | TAPE } **=**physical_backup_device_name

      Дополнительные сведения см. в разделе Устройства резервного копирования.

    • { RECOVERY | NORECOVERY }
      Если в базе данных используется модель полного восстановления, может возникнуть необходимость применить резервные копии журналов транзакций после восстановления базы данных. В этом случае укажите параметр NORECOVERY.

      В противном случае используйте параметр RECOVERY, который применяется по умолчанию.

    • FILE = { backup_set_file_number | @backup_set_file_number }
      Идентифицирует резервный набор данных для восстановления. Например, аргумент backup_set_file_number, равный 1, указывает первый резервный набор данных на носителе данных резервных копий, а аргумент backup_set_file_number, равный 2, указывает второй резервный набор данных. Значение backup_set_file_number резервного набора данных можно получить с помощью инструкции RESTORE HEADERONLY.

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

      Дополнительные сведения см. в подразделе «Задание резервного набора данных» раздела Аргументы инструкции RESTORE (Transact-SQL).

    • MOVE 'логическое_имя_файла_в_резервной_копии' TO 'имя_файла_в_операционной_системе' [ ,...n ]
      Показывает, что файл данных или журнала, указанный параметром logical_file_name_in_backup, следует восстановить из копии в месте, указанном параметром operating_system_file_name. Укажите инструкцию MOVE для каждого логического файла, который надо восстановить из резервного набора данных в новом месте.

      Способ

      Описание

      logical_file_name_in_backup

      Указывает логическое имя файла данных или журнала в резервном наборе данных. Логическое имя файла данных или журнала в резервном наборе данных соответствует его логическому имени в базе данных на момент создания резервного набора данных.

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

      имя_файла_в_операционной_системе

      Задает новое место для файла, указанного параметром logical_file_name_in_backup. Файл будет восстановлен в этом месте.

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

      n

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

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

После восстановления базы данных SQL Server 2005 или SQL Server 2000 в SQL Server 2008 она немедленно доступна для работы, а ее обновление производится автоматически. Если база данных содержит полнотекстовые индексы, то в процессе обновления будут произведены их импорт, сброс или перестроение в зависимости от установленного значения свойства сервера upgrade_option. Если при обновлении выбран режим импорта (upgrade_option = 2) или перестроения (upgrade_option = 0), то полнотекстовые индексы во время обновления будут недоступны. В зависимости от объема индексируемых данных процесс импорта может занять несколько часов, а перестроение — в несколько (до десяти) раз больше. Обратите внимание, что если для обновления выбран режим «Импортировать», а полнотекстовый каталог недоступен, то связанные с ним полнотекстовые индексы будут перестроены. Чтобы изменить свойство сервера upgrade_option, используется процедура sp_fulltext_service.

Примеры

Описание

В следующем примере создается новая база данных MyAdvWorks. MyAdvWorks, представляющая собой копию существующей базы данных AdventureWorks2008R2, в которой содержится два файла: AdventureWorks2008R2_Data и AdventureWorks2008R2_Log. В этой базе данных используется простая модель восстановления. База данных AdventureWorks2008R2 уже существует на экземпляре сервера, поэтому файлы в резервной копии должны быть восстановлены в новом месте. Количество и имена восстанавливаемых файлов базы данных можно определить с помощью инструкции RESTORE FILELISTONLY. Резервная копия базы данных является первым резервным набором данных на устройстве резервного копирования.

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

Пример создания полной резервной копии базы данных База данных AdventureWorks2008R2 см. в разделе Как создать полную резервную копию базы данных (Transact-SQL).

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

В примерах резервного копирования и восстановления журнала транзакций из копии, включая восстановления на момент времени, используется база данных MyAdvWorks_FullRM, которая создается из базы данных AdventureWorks2008R2, как в следующем примере с базой данных MyAdvWorks. Однако полученную базу данных MyAdvWorks_FullRM необходимо изменить для использования модели полного восстановления: ALTER DATABASE MyAdvWorks_FullRM SET RECOVERY FULL.

Код

USE master
GO
-- First determine the number and names of the files in the backup.
-- AdventureWorks2008R2_Backup is the name of the backup device.
RESTORE FILELISTONLY
   FROM AdventureWorks2008R2_Backup
-- Restore the files for MyAdvWorks.
RESTORE DATABASE MyAdvWorks
   FROM AdventureWorks2008R2_Backup
   WITH RECOVERY,
   MOVE 'AdventureWorks2008R2_Data' TO 'D:\MyData\MyAdvWorks_Data.mdf', 
   MOVE 'AdventureWorks2008R2_Log' TO 'F:\MyLog\MyAdvWorks_Log.ldf'
GO