sp_attach_db (Transact-SQL)

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

Присоединение базы данных к серверу.

Внимание

Эта функция будет удалена в будущей версии SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется. Вместо этого рекомендуется использовать CREATE DATABASE <database_name> FOR ATTACH . Дополнительные сведения см. в статье CREATE DATABASE (SQL Server Transact-SQL). Чтобы перестроить несколько файлов журнала, если одно или несколько имеют новое расположение, используйте CREATE DATABASE <database_name> FOR ATTACH_REBUILD_LOG.

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

Синтаксис

sp_attach_db
    [ @dbname = ] N'dbname'
    , [ { @filename1 ... @filename16 } = ] { N'*filename1*' ... N'*filename16*' }
[ ; ]

Аргументы

[ @dbname = ] N'dbname'

Имя базы данных, присоединенной к серверу. @dbname — sysname, без значения по умолчанию.

[ { @filename1 ... @filename16 } = ] { N'filename1' ... N'filename16' }

Физическое имя, включая путь к файлу базы данных. Этот параметр имеет значение nvarchar(260) с значением по умолчанию NULL. Можно указать до 16 имен файлов. Имена параметров начинаются с @filename1 и увеличиваются до @filename16. Список имен файлов должен содержать по крайней мере основной файл (.mdf). Первичный файл содержит системные таблицы, указывающие на другие файлы базы данных. Список также должен включать все файлы, перемещенные после отключения базы данных.

Этот параметр сопоставляется с параметром FILENAMECREATE DATABASE инструкции. Дополнительные сведения см. в статье CREATE DATABASE (SQL Server Transact-SQL).

Примечание.

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

Значения кода возврата

0 (успешно) или 1 (сбой).

Результирующий набор

Нет.

Замечания

Хранимая sp_attach_db процедура должна выполняться только в базах данных, которые ранее отсоединялись от сервера базы данных с помощью явной sp_detach_db операции или скопированных баз данных. Если необходимо указать более 16 файлов, используйте CREATE DATABASE <database_name> FOR ATTACH или CREATE DATABASE <database_name> FOR_ATTACH_REBUILD_LOG. Дополнительные сведения см. в статье CREATE DATABASE (SQL Server Transact-SQL).

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

База данных, созданная более последней версией SQL Server, не может быть присоединена в более ранних версиях.

Примечание.

Моментальный снимок базы данных не может быть отключен или присоединен.

При присоединении реплика указанной базы данных, скопированной вместо отсоединения, рассмотрите следующие условия:

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

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

  • При подключении базы данных к другому экземпляру сервера, независимо от его версии, необходимо запустить процедуру sp_removedbreplication для удаления репликации по завершении операции подключения.

При первом присоединении или восстановлении базы данных к новому экземпляру SQL Server копия главного ключа базы данных (DMK), зашифрованная главным ключом службы (SMK), еще не хранится на сервере. Для расшифровки DMK необходимо использовать инструкцию OPEN MASTER KEY . После расшифровки DMK вы можете включить автоматическую расшифровку в будущем с помощью инструкции, чтобы предоставить серверу копию dmK, зашифрованную с помощью ALTER MASTER KEY REGENERATE SMK. При обновлении базы данных с более ранней версии dmK следует повторно создать для использования более нового алгоритма AES. Дополнительные сведения о повторном создании главного ключа базы данных см. в статье ALTER MASTER KEY (Transact-SQL). Время, необходимое для повторного создания главного ключа базы данных с обновлением до алгоритма шифрования AES, зависит от числа объектов, защищаемых главным ключом базы данных. Повторное создание ключа интеллектуального анализа данных для обновления до AES необходимо только один раз и не влияет на будущие повторное создание в рамках стратегии смены ключей.

Разрешения

Сведения о том, как обрабатываются разрешения при присоединении базы данных, см. в статье CREATE DATABASE.

Примеры

В данном примере происходит подключение файлов из базы данных AdventureWorks2022 к текущему серверу.

EXEC sp_attach_db @dbname = N'AdventureWorks2022',
    @filename1 =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks2022_Data.mdf',
    @filename2 =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks2022_log.ldf';