Поделиться через


sp_attach_db (Transact-SQL)

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

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

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

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

Чтобы перестроить несколько файлов журнала, если один или более файлов изменили расположение, используйте инструкцию CREATE DATABASE database_name FOR ATTACH_REBUILD_LOG.

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

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

Значок ссылки на раздел Синтаксические обозначения в Transact-SQL

Синтаксис

sp_attach_db [ @dbname= ] 'dbname'
    , [ @filename1= ] 'filename_n' [ ,...16 ] 

Аргументы

  • [ @dbname= ] **'**dbnam '
    Имя базы данных, присоединяемой к серверу. Имя должно быть уникальным. Аргумент dbname имеет тип sysname и значение по умолчанию NULL.

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

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

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

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

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

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 (Transact-SQL).

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

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

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

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

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

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

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

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

Только базы данных SQL Server 2005 и более поздних версий могут быть подключены к SQL Server 2012. Если база данных имеет уровень совместимости меньше 90, это значение будет изменено на 90 после присоединения базы данных к SQL Server 2012.

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

Разрешения

Дополнительные сведения об управлении разрешениями при присоединении базы данных см. в разделе CREATE DATABASE (Transact-SQL).

Примеры

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

EXEC sp_attach_db @dbname = N'AdventureWorks2012', 
    @filename1 = 
N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\AdventureWorks2012_Data.mdf', 
    @filename2 = 
N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\AdventureWorks2012_log.ldf';

См. также

Справочник

sp_detach_db (Transact-SQL)

sp_helpfile (Transact-SQL)

Хранимая процедура sp_removedbreplication (Transact-SQL)

Системные хранимые процедуры (Transact-SQL)

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

Присоединение и отсоединение базы данных (SQL Server)