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

Применимо к:SQL Server

В этом разделе описывается перемещение отсоединяемой базы данных в другое расположение и повторное подключение к одному или другому экземпляру сервера в SQL Server. Однако рекомендуется переносить базы данных с помощью процедуры запланированного переноса ALTER DATABASE, а не путем отсоединения и присоединения. Дополнительные сведения см. в статье Move User Databases.

Внимание

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

Процедура

Перемещение базы данных при помощи операций отсоединения и присоединения

  1. Отсоединение базы данных. Дополнительные сведения см. в разделе Отсоединение базы данных.

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

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

    Заметка

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

  3. Присоединение скопированных файлов. Дополнительные сведения см. в статье Attach a Database.

пример

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

  1. Отсоедините базу данных AdventureWorks2022, выполнив следующие инструкции Transact-SQL:

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

    Внимание

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

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

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

    USE master;  
    GO  
    CREATE DATABASE MyAdventureWorks   
        ON (FILENAME = 'C:\MySQLServer\AdventureWorks2022_Data.mdf'),  
        (FILENAME = 'C:\MySQLServer\AdventureWorks2022_Log.ldf')  
        FOR ATTACH;  
    GO  
    

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

См. также

Отсоединение базы данных и подключение (SQL Server)