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

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

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

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

В Microsoft SQL Server 2005 хранимая процедура sp_detach_db была улучшена, благодаря чему при отсоединении базы данных связанные с ней файлы полнотекстового индекса теперь не удаляются. Дополнительные сведения см. в разделе Присоединение и отсоединение полнотекстовых каталогов.

ms187858.note(ru-ru,SQL.90).gifПримечание.
Отсоединение и присоединение можно использовать для обновления базы данных SQL Server версии 7.0 или SQL Server 2000 до версии SQL Server 2005. Дополнительные сведения см. в разделе Как обновить базу данных при помощи отсоединения и присоединения (Transact-SQL).

Процедура

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

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

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

    ms187858.note(ru-ru,SQL.90).gifПримечание.
    Если база данных включает только один файл небольшого размера, для ее перемещения можно использовать электронную почту.

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

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

    ms187858.note(ru-ru,SQL.90).gifПримечание.
    Сведения о присоединении базы данных с использованием обозревателя объектов см. в разделе Как присоединить базу данных (среда Microsoft SQL Server Management Studio).

Пример

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

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

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

    ms187858.note(ru-ru,SQL.90).gifВажно!
    При работе с производственными базами данных помещайте базу данных и журналы транзакций на отдельные диски.

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

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

    USE master;
    GO
    CREATE DATABASE MyAdventureWorks 
        ON (FILENAME = 'C:\MySQLServer\AdventureWorks_Data.mdf'),
        (FILENAME = 'C:\MySQLServer\AdventureWorks_Log.ldf')
        FOR ATTACH;
    GO
    
    ms187858.note(ru-ru,SQL.90).gifПримечание.
    В среде SQL Server Management Studio только что присоединенная база данных отображается в обозревателе объектов не сразу. Чтобы отобразить базу данных, щелкните в обозревателе объектов пункт Вид, а затем Обновить. Теперь, раскрыв в обозревателе объектов узел Базы данных, можно увидеть в списке присоединенную базу данных.

См. также

Основные понятия

Присоединение и отсоединение баз данных

Справка и поддержка

Получение помощи по SQL Server 2005