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


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 2008 R2 файлы каталога присоединяются из предыдущего местоположения вместе с другими файлами базы данных, так же как и в 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, чтобы удалить репликацию после завершения операции присоединения.

База данных-источник должна иметь версию не ниже 80 (SQL Server 2000), чтобы ее можно было присоединить к SQL Server 2008 R2, SQL Server 2008. Для баз данных SQL Server 2000 или SQL Server 2005, имеющих уровень совместимости менее 80, при присоединении будет установлен уровень совместимости 80.

Разрешения

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

Примеры

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

EXEC sp_attach_db @dbname = N'AdventureWorks2008R2', 
    @filename1 = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\AdventureWorks2008R2_Data.mdf', 
    @filename2 = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\AdventureWorks2008R2_log.ldf';