sp_detach_db (Transact-SQL)
適用於:SQL Server
卸離目前未使用的資料庫與伺服器實例,並選擇性地在所有數據表上執行 UPDATE STATISTICS,然後再卸離。
重要
若要卸離複寫的資料庫,它必須取消發佈。 如需詳細資訊,請參閱本主題稍後的一節。
語法
sp_detach_db [ @dbname= ] 'database_name'
[ , [ @skipchecks= ] 'skipchecks' ]
[ , [ @keepfulltextindexfile = ] 'KeepFulltextIndexFile' ]
引數
[ @dbname = ] 'database_name'
這是要卸離的資料庫名稱。 database_name是 sysname 值,預設值為 NULL。
[ @skipchecks = ] 'skipchecks'
指定是否要略過或執行UPDATE STATISTICS。 skipchecks 是 nvarchar(10) 值,預設值為 NULL。 若要略過 UPDATE STATISTICS,請指定 true。 若要明確執行 UPDATE STATISTICS,請指定 false。
根據預設,會執行UPDATE STATISTICS來更新數據表和索引中數據的相關信息。 執行 UPDATE STATISTICS 對於要移至唯讀媒體的資料庫很有用。
[ @keepfulltextindexfile = ] 'KeepFulltextIndexFile'
指定在資料庫卸離作業期間不會卸除與卸離之資料庫相關聯的全文檢索索引檔案。 KeepFulltextIndexFile 是 nvarchar(10) 值,預設值為 true。 如果 KeepFulltextIndexFile 為 false,除非資料庫是只讀的,否則會卸除與資料庫相關聯的所有全文檢索索引檔案和全文檢索索引的元數據。 如果為 NULL 或 true,則會保留全文檢索相關元數據。
重要
未來的 SQL Server 版本將會移除@keepfulltextindexfile參數。 請勿在新的開發工作中使用此參數,並儘快修改目前使用此參數的應用程式。
傳回碼值
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 選項)。 檔案可以移至另一部伺服器,並附加至該處。
權限
需要系統管理員固定伺服器角色的成員資格,或資料庫db_owner角色的成員資格。
範例
下列範例會將 AdventureWorks2022 資料庫 中斷連結,並將 skipchecks 設定為 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)
卸離資料庫
意見反映
https://aka.ms/ContentUserFeedback。
即將推出:我們會在 2024 年淘汰 GitHub 問題,並以全新的意見反應系統取代並作為內容意見反應的渠道。 如需更多資訊,請參閱:提交及檢視以下的意見反映: