sp_detach_db (Transact-SQL)
Изменения: 12 декабря 2006 г.
Отсоединяет неиспользуемую базу данных от экземпляра сервера и (необязательно) выполняет инструкцию 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, то метаданные, связанные с полнотекстовыми данными, сохраняются.
Значения кодов возврата
0 (успешное завершение) или 1 (неуспешное завершение)
Результирующие наборы
Нет
Замечания
Ограничения
Невозможно отсоединить базу данных, если выполняется одно из следующих условий:
- База данных в настоящий момент используется. Дополнительные сведения см. ниже в разделе «Получение монопольного доступа».
- При репликации база данных публикуется.
Перед отсоединением базы данных необходимо отменить все публикации с помощью процедуры sp_replicationdboption.Примечание. Если невозможно использовать процедуру sp_replicationdboption, можно удалить репликацию, выполнив процедуру sp_removedbreplication. - Имеется моментальный снимок базы данных.
Перед отсоединением базы данных необходимо удалить все моментальные снимки. Дополнительные сведения см. в разделе Как удалить моментальный снимок базы данных (Transact-SQL).Примечание. Невозможно отсоединить или присоединить моментальный снимок базы данных. - Выполняется зеркальное отображение базы данных.
Отключить базу данных невозможно, пока этот процесс не завершится. Дополнительные сведения см. в разделе Удаление зеркального отображения базы данных. - База данных помечена как подозрительная.
В 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
Примечание. |
---|
Чтобы принудительно отключить текущих пользователей от базы данных, немедленно или через указанное число секунд, используйте параметр 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 г. |
|
17 июля 2006 г. |
|
14 апреля 2006 г. |
|
5 декабря 2005 г. |
|