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


sp_detach_db (Transact-SQL)

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

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

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

Значок ссылки на разделСинтаксические обозначения в 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 запускается для обновления информации о данных в таблицах и индексах в компоненте SQL Server 2005 Database Engine и более поздних версий. Выполнение 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 2005 и более поздних версиях подозрительную базу необходимо перевести в аварийный режим перед ее отсоединением. Дополнительные сведения о переводе базы данных в аварийный режим см. в разделе ALTER DATABASE (Transact-SQL).

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

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

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

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

USE master;
ALTER DATABASE AdventureWorks
SET SINGLE_USER;
GO
ПримечаниеПримечание

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

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

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

Разрешения

Требуется членство в предопределенной роли базы данных db_owner.

Примеры

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

EXEC sp_detach_db 'AdventureWorks', 'true';

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

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