sp_detach_db (Transact-SQL)
更新: 2006 年 12 月 12 日
從伺服器執行個體中卸離目前未使用的資料庫,並於卸離之前在所有資料表上選擇性地執行 UPDATE STATISTICS。
重要事項: |
---|
必須是未發行的複寫資料庫,才能予以卸離。如需詳細資訊,請參閱本主題後面的<備註>一節。 |
語法
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 Service Pack 2 中,針對每次清除計劃快取的快取存放區,SQL Server 錯誤記錄檔會包含下列參考訊息:「由於某些資料庫維護或重新設定作業,SQL Server 的 '%s' 快取存放區 (計劃快取的一部分) 發生 %d 次快取存放區排清。」只要快取發生排清,這個訊息就會每五分鐘記錄一次。
取得獨佔存取權
您需要有資料庫的獨佔存取權才能卸離資料庫。如果您要卸離的資料庫正在使用中,請先將資料庫設為 SINGLE_USER 模式以取得獨佔存取權,才能進行卸離。
例如,下列 ALTER DATABASE
陳述式會在所有現行使用者中斷與資料庫的連接之後,取得 AdventureWorks
資料庫的獨佔存取權:
USE master;
ALTER DATABASE AdventureWorks
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 選項)。您可以將這些檔案移到另一部伺服器,將它附加在那裡。
權限
需要 db_owner 固定資料庫角色中的成員資格。
範例
下列範例會卸離 skipchecks 設為 true 的 AdventureWorks
資料庫。
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)
說明及資訊
變更歷程記錄
版本 | 歷程記錄 |
---|---|
2006 年 12 月 12 日 |
|
2006 年 7 月 17 日 |
|
2006 年 4 月 14 日 |
|
2005 年 12 月 5 日 |
|