sp_detach_db (Transact-SQL)
Область применения: SQL Server
Отсоединяет базу данных, которая в настоящее время не используется от экземпляра сервера, а при необходимости выполняется UPDATE STATISTICS
во всех таблицах перед отключением.
Перед отсоединением реплицируемой базы данных ее публикация должна быть прекращена. Дополнительные сведения см. в разделе "Примечания" далее в этой статье.
Соглашения о синтаксисе Transact-SQL
Синтаксис
sp_detach_db
[ [ @dbname = ] N'dbname' ]
[ , [ @skipchecks = ] N'skipchecks' ]
[ , [ @keepfulltextindexfile = ] N'keepfulltextindexfile' ]
[ ; ]
Аргументы
[ @dbname = ] N'dbname'
Имя отсоединяемой базы данных. @dbname — sysname с значением по умолчаниюNULL
.
[ @skipchecks = ] N'skipchecks'
Указывает, следует ли пропускать или запускать UPDATE STATISTICS
. @skipchecks — nvarchar(10) с значением по умолчаниюNULL
. Чтобы пропустить UPDATE STATISTICS
, укажите true
. Для явного выполнения UPDATE STATISTICS
укажите false
.
По умолчанию UPDATE STATISTICS
выполняется обновление сведений о данных в таблицах и индексах. UPDATE STATISTICS
Выполнение полезно для баз данных, которые необходимо переместить на носитель только для чтения.
[ @keepfulltextindexfile = ] N'keepfulltextindexfile'
Указывает, что файл полнотекстового индекса, связанный с отсоединяемой базой данных, не удаляется во время операции отсоединения базы данных. @keepfulltextindexfile — nvarchar(10) с значением по умолчаниюtrue
.
- Если @keepfulltextindexfile
false
, все файлы полнотекстового индекса, связанные с базой данных, и метаданные полнотекстового индекса удаляются, если база данных не доступна только для чтения. - Если
NULL
илиtrue
сохраняется полнотекстовые метаданные, связанные с ним.
Внимание
Эта функция будет удалена в будущей версии SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.
Значения кода возврата
0
(успешно) или 1
(сбой).
Результирующий набор
Нет.
Замечания
При отсоединении базы данных все метаданные удаляются. Если база данных была базой данных по умолчанию для любых учетных записей входа, master
становится их базой данных по умолчанию.
Примечание.
Сведения о просмотре базы данных по умолчанию всех учетных записей входа см. в sp_helplogins. Если у вас есть необходимые разрешения, можно использовать ALTER LOGIN для назначения новой базы данных по умолчанию для входа.
Ограничения
Невозможно отключить базу данных, если одно из следующих значений имеет значение true:
База данных в настоящий момент используется. Дополнительные сведения см. в разделе "Получение эксклюзивного доступа".
При репликации база данных публикуется.
Перед отключением базы данных необходимо отключить публикацию, выполнив sp_replicationdboption.
Если вы не можете использовать
sp_replicationdboption
, можно удалить репликацию, выполнив sp_removedbreplication.Имеется моментальный снимок базы данных.
Перед отсоединением базы данных необходимо удалить все моментальные снимки. Дополнительные сведения см. в разделе "Удаление моментального снимка базы данных".
Моментальный снимок базы данных не может быть отключен или присоединен.
Выполняется зеркальное отображение базы данных.
База данных не может быть отключена до завершения сеанса зеркального отображения базы данных. Дополнительные сведения см. в разделе Удаление зеркального отображения базы данных (SQL Server).
База данных помечена как подозрительная.
Подозрительную базу данных необходимо перевести в аварийный режим перед ее отсоединением. Дополнительные сведения о том, как поместить базу данных в аварийный режим, см. в разделе ALTER DATABASE.
База данных является системной базой данных.
Получение эксклюзивного доступа
Для отсоединения базы данных требуется монопольный доступ к ней. Если база данных, которую вы хотите отсоединить, используется, прежде чем отсоединить ее, установите для базы данных 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_REBUILD_LOG
параметромFOR ATTACH
). Файлы можно также переместить на другой сервер и подсоединить там.
Разрешения
Требуется членство в предопределенных ролях сервера sysadmin или членство в db_owner роли базы данных.
Примеры
Примеры кода Transact-SQL в этой статье используют AdventureWorks2022
базу данных или AdventureWorksDW2022
пример базы данных, которую можно скачать с домашней страницы примеров и проектов сообщества Microsoft SQL Server.
В следующем примере база данных отсоединяется AdventureWorks2022
с @skipchecks задано true
значение .
EXEC sp_detach_db 'AdventureWorks2022', 'true';
В следующем примере отсоединяется база данных AdventureWorks2022
и сохраняются файлы полнотекстового индекса и метаданные полнотекстового индекса. Эта команда выполняет инструкцию UPDATE STATISTICS — такое поведение установлено по умолчанию.
EXEC sp_detach_db @dbname = 'AdventureWorks2022',
@keepfulltextindexfile = 'true';