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

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

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

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

Примечание по безопасностиПримечание по безопасности

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

Когда базу данных SQL Server 2005 с файлами полнотекстовых каталогов присоединяют к экземпляру сервера SQL Server 2008, то присоединение файлов каталогов выполняется из их предыдущего расположения вместе с другими файлами баз данных, как и в SQL Server 2005. Дополнительные сведения см. в разделе Обновление полнотекстового поиска. Когда обновленную базу данных SQL Server 2005 с файлами полнотекстовых каталогов отсоединяют от экземпляра сервера SQL Server 2008, то файлы каталогов остаются с другими файлами базы данных, как и в SQL Server 2005.

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

Отсоединение и присоединение можно использовать для обновления базы данных SQL Server 2000 или SQL Server 2005 до версии SQL Server 2008. Дополнительные сведения см. в разделе Как обновить базу данных при помощи отсоединения и присоединения (Transact-SQL).

Процедура

Копирование базы данных путем ее отсоединения и присоединения.

  1. Отсоедините базу данных при помощи хранимой процедуры sp_detach_db.

  2. Переместите в «Проводнике» или окне командной строки файлы отсоединенной базы данных и журналов в новое место.

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

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

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

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

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

  3. Присоедините скопированные файлы при помощи инструкции CREATE DATABASE языка Transact-SQL с предложением FOR ATTACH [ WITH <параметр_Service_Broker> ] или предложением FOR ATTACH_REBUILD_LOG (дополнительные сведения см. в разделе CREATE DATABASE (Transact-SQL)). Каждая база данных содержит уникальный идентификатор, используемый для направления сообщений компонента Service Broker в эту базу данных. Если база данных использует компонент Service Broker, дополнительную информацию см. в разделе Управление идентификационными данными компонента Service Broker.

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

    Сведения о присоединении базы данных с использованием обозревателя объектов см. в разделе Как присоединить базу данных (среда Microsoft SQL Server Management Studio).

Пример

В следующем примере создается копия базы данных База данных AdventureWorks2008R2 с именем MyAdventureWorks. Инструкции Transact-SQL выполняются в окне редактора запросов, подключенном к экземпляру сервера, к которому присоединена база данных AdventureWorks2008R2.

  1. Отсоедините базу данных AdventureWorks2008R2. Для этого выполните следующие инструкции Transact-SQL.

    USE master;
    GO
    EXEC sp_detach_db @dbname = N'AdventureWorks2008R2';
    GO
    
  2. Скопируйте любым образом файлы базы данных (AdventureWorks2008R2_Data.mdf и AdventureWorks2008R2_log) в папки «C:\MySQLServer\AdventureWorks2008R2_Data.mdf» и «C:\MySQLServer\AdventureWorks2008R2_Log.ldf» соответственно.

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

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

    При копировании файлов по сети на диск удаленного компьютера укажите имя удаленного места в формате UNC. Имя UNC имеет следующий формат: **\\имя_сервера\имя_общего_хранилища\путь\**имя_файла. Как и при записи файлов на жесткий диск локального компьютера, для записи (или считывания) файла на диск удаленного компьютера учетной запись пользователя, которая используется экземпляром SQL Server, должны быть предоставлены соответствующие разрешения.

  3. Присоедините перемещенную базу данных и, возможно, ее журнал, выполнив следующие инструкции Transact-SQL:

    USE master;
    GO
    CREATE DATABASE MyAdventureWorks 
        ON (FILENAME = 'C:\MySQLServer\AdventureWorks2008R2_Data.mdf'),
        (FILENAME = 'C:\MySQLServer\AdventureWorks2008R2_Log.ldf')
        FOR ATTACH;
    GO
    
    ПримечаниеПримечание

    В среде Среда SQL Server Management Studio только что присоединенная база данных отображается в обозревателе объектов не сразу. Чтобы отобразить базу данных, щелкните в обозревателе объектов пункт Вид, а затем Обновить. Теперь, раскрыв в обозревателе объектов узел Базы данных, можно увидеть в списке присоединенную базу данных.