sp_detach_db (Transact-SQL)

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

Отсоединяет неиспользуемую базу данных от экземпляра сервера и (необязательно) выполняет инструкцию 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 запускается для обновления информации о данных в таблицах и индексах. Выполнение UPDATE STATISTICS имеет смысл для тех баз данных, которые планируется переместить на постоянные носители информации.

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

Внимание

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

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

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

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

None

Замечания

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

Заметка

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

Ограничения

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

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

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

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

    Заметка

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

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

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

    Заметка

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

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

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

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

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

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

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

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

Перед заданием параметра SINGLE_USER проверьте, чтобы параметру AUTO_UPDATE_STATISTICS_ASYNC было присвоено значение OFF. Если этот параметр имеет значение ON, то фоновый поток, используемый для обновления статистики, соединится с базой данных и доступ к базе данных в однопользовательском режиме будет невозможен. Дополнительные сведения см. в разделе "Настройка базы данных в режиме одного пользователя".

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

USE master;  
ALTER DATABASE AdventureWorks2022  
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 или членство вdb_owner роли базы данных.

Примеры

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

EXEC sp_detach_db 'AdventureWorks2022', 'true';  

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

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

См. также

ALTER DATABASE (Transact-SQL)
Отсоединение базы данных и подключение (SQL Server)
CREATE DATABASE (SQL Server Transact-SQL)
Отсоединение базы данных