sp_detach_db (Transact-SQL)

Отсоединяет неиспользуемую базу данных от экземпляра сервера и (необязательно) выполняет инструкцию UPDATE STATISTICS для всех таблиц перед отключением.

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

Перед отсоединением реплицируемой базы данных ее публикация должна быть прекращена.Дополнительные сведения см. в подразделе «Замечания» далее в этом разделе.

Применимо для следующих объектов: SQL Server (начиная с SQL Server 2008 до текущей версии).

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

Синтаксис

sp_detach_db [ @dbname= ] 'database_name' 
    [ , [ @skipchecks= ] 'skipchecks' ] 
    [ , [ @keepfulltextindexfile = ] 'KeepFulltextIndexFile' ] 

Аргументы

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

  • [ @skipchecks = ] 'skipchecks'
    Указывает, выполнять или нет инструкцию UPDATE STATISTIC. Аргумент skipchecks имеет тип nvarchar(10) и значение по умолчанию NULL. Чтобы не выполнять инструкцию UPDATE STATISTICS, укажите значение true. Чтобы явно запустить инструкцию UPDATE STATISTICS, укажите значение false.

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

  • [ @keepfulltextindexfile= ] 'KeepFulltextIndexFile'
    Указывает, что файл полнотекстового индекса, связанный с отсоединяемой базой данных, не будет удален во время операции отсоединения базы данных. Аргумент KeepFulltextIndexFile имеет тип nvarchar(10) и значение по умолчанию true. Если аргумент KeepFulltextIndexFile имеет значение false, то файлы полнотекстового индекса, связанные с базой данных и метаданные полнотекстового индекса, удаляются, если база данных не является доступной только для чтения. Если аргумент имеет значение NULL или true, то метаданные, связанные с полнотекстовыми данными, сохраняются.

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

    Параметр @keepfulltextindexfile будет удален в следующей версии SQL Server.Не используйте его при работе над новыми приложениями и как можно быстрее измените приложения, в которых он в настоящее время используется.

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

0 (успешное завершение) или 1 (неуспешное завершение)

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

Нет

Замечания

При отсоединении базы данных все метаданные удаляются. Если эта база данных была базой данных по умолчанию для учетной записи входа, базой данных по умолчанию становится master.

Примечание

Дополнительные сведения о просмотре базы данных по умолчанию для всех учетных записей входа см. в разделе sp_helplogins (Transact-SQL).Чтобы назначить для входа новую базу данных по умолчанию, при наличии необходимых разрешений можно использовать инструкцию ALTER LOGIN.

Ограничения

Невозможно отсоединить базу данных, если выполняется одно из следующих условий:

  • База данных в настоящий момент используется. Дополнительные сведения см. ниже в разделе «Получение монопольного доступа».

  • При репликации база данных публикуется.

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

    Примечание

    Если невозможно использовать процедуру sp_replicationdboption, можно удалить репликацию, выполнив процедуру sp_removedbreplication.

  • Имеется моментальный снимок базы данных.

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

    Примечание

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

  • Выполняется зеркальное отображение базы данных.

    Отключить базу данных невозможно, пока этот процесс не завершится. Дополнительные сведения см. в разделе Удаление зеркального отображения базы данных (SQL Server).

  • База данных помечена как подозрительная.

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

  • База данных является системной базой данных.

Получение монопольного доступа

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

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

USE master;
ALTER DATABASE AdventureWorks2012
SET SINGLE_USER;
GO

Примечание

Чтобы принудительно отключить текущих пользователей от базы данных, немедленно или через указанное число секунд, используйте параметр ROLLBACK: ALTER DATABASE database_name SET SINGLE_USER WITH ROLLBACK rollback_option.Дополнительные сведения см. в разделе ALTER DATABASE (Transact-SQL).

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

Отсоединенные файлы останутся на диске и могут быть повторно подсоединены с помощью вызова CREATE DATABASE (с параметрами FOR ATTACH или FOR ATTACH_REBUILD_LOG). Файлы можно также переместить на другой сервер и подсоединить там.

Разрешения

Требует членства в предопределенной роли сервера sysadmin.

Примеры

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

EXEC sp_detach_db 'AdventureWorks2012', 'true';

В следующем примере отсоединяется база данных AdventureWorks2012 и сохраняются файлы полнотекстового индекса и метаданные полнотекстового индекса. Эта команда выполняет инструкцию UPDATE STATISTICS — такое поведение установлено по умолчанию.

exec sp_detach_db @dbname='AdventureWorks2012'
    , @keepfulltextindexfile='true';

См. также

Справочник

ALTER DATABASE (Transact-SQL)

CREATE DATABASE (SQL Server Transact-SQL)

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

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

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