sp_detach_db (Transact-SQL)

Изменения: 12 декабря 2006 г.

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

ms188031.note(ru-ru,SQL.90).gifВажно!
Перед отсоединением реплицируемой базы данных ее публикация должна быть прекращена. Дополнительные сведения см. в подразделе «Примечания» далее в этом разделе.

Значок ссылки на разделСинтаксические обозначения в 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, то метаданные, связанные с полнотекстовыми данными, сохраняются.

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

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

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

Нет

Замечания

Ограничения

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

  • База данных в настоящий момент используется. Дополнительные сведения см. ниже в разделе «Получение монопольного доступа».
  • При репликации база данных публикуется.
    Перед отсоединением базы данных необходимо отменить все публикации с помощью процедуры sp_replicationdboption.
    ms188031.note(ru-ru,SQL.90).gifПримечание.
    Если невозможно использовать процедуру sp_replicationdboption, можно удалить репликацию, выполнив процедуру sp_removedbreplication.
  • Имеется моментальный снимок базы данных.
    Перед отсоединением базы данных необходимо удалить все моментальные снимки. Дополнительные сведения см. в разделе Как удалить моментальный снимок базы данных (Transact-SQL).
    ms188031.note(ru-ru,SQL.90).gifПримечание.
    Невозможно отсоединить или присоединить моментальный снимок базы данных.
  • Выполняется зеркальное отображение базы данных.
    Отключить базу данных невозможно, пока этот процесс не завершится. Дополнительные сведения см. в разделе Удаление зеркального отображения базы данных.
  • База данных помечена как подозрительная.
    В SQL Server 2005 подозрительную базу необходимо перевести в аварийный режим перед ее отсоединением. Дополнительные сведения о переводе базы данных в аварийный режим см. в разделе ALTER DATABASE (Transact-SQL).
  • База данных является системной базой данных.

Отсоединение базы данных удаляет кэш планов для экземпляра SQL Server. Удаление кэша планов приводит к перекомпиляции всех последующих планов выполнения и может вызвать мгновенное, временное снижение производительности запросов. В SQL Server 2005 с пакетом обновления 2 для каждого удаленного хранилища кэша в кэше планов журнал ошибок SQL Server содержит следующее информационное сообщение: "SQL Server обнаружил %d экземпляров, сброшенных на диск хранилищ кэша для хранилища кэша '%s' части кэша планов в результате операций по обслуживанию или изменению конфигурации базы данных". Это сообщение протоколируется каждые пять минут при сбросе кэша в течение этого временного интервала.

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

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

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

USE master;
ALTER DATABASE AdventureWorks
SET SINGLE_USER;
GO
ms188031.note(ru-ru,SQL.90).gifПримечание.
Чтобы принудительно отключить текущих пользователей от базы данных, немедленно или через указанное число секунд, используйте параметр 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';

См. также

Справочник

ALTER DATABASE (Transact-SQL)
CREATE DATABASE (Transact-SQL)

Другие ресурсы

Присоединение и отсоединение баз данных
Защита данных и файлов журналов
Как отсоединить базу данных (среда SQL Server Management Studio)

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

12 декабря 2006 г.

Новое содержимое
  • Добавлен раздел к подразделу «Примечания» о удалении кэша планов.
Измененное содержимое
  • Объясняется управление параметром @keepfulltextindexfile.

17 июля 2006 г.

Новое содержимое
  • Добавлено ограничение к отсоединению системной базы данных.

14 апреля 2006 г.

Новое содержимое
  • Добавлен пример использования переменной @keepfulltextindexfile.
Измененное содержимое
  • Переменная @KeepFulltextIndexFile заменена на @keepfulltextindexfile.

5 декабря 2005 г.

Новое содержимое
  • Добавлено ограничение о том, что база данных не должна использоваться в настоящий момент; также добавлен подраздел о получении монопольного доступа перед выполнением процедуры sp_detach_db.