sp_detach_db (Transact-SQL)

從伺服器執行個體中卸離目前未使用的資料庫,並於卸離之前在所有資料表上選擇性地執行 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,則會保留全文檢索的相關中繼資料。

    重要注意事項重要事項

    在未來的 SQL Server 版本中,將會移除 @keepfulltextindexfile 參數。請勿在新的開發工作中使用此參數,並且盡快修改使用此參數的應用程式。

傳回碼值

0 (成功) 或 1 (失敗)

結果集

備註

卸離資料庫時,就會卸除其所有中繼資料。如果該資料庫是任何登入帳戶的預設資料庫,master 就會成為其預設資料庫。

[!附註]

如需有關如何檢視所有登入帳戶之預設資料庫的詳細資訊,請參閱<sp_helplogins (Transact-SQL)>。如果您擁有必要的權限,就可以使用 ALTER LOGIN,將新的預設資料庫指派給登入。

限制

如果出現下列中的任何狀況,您便無法卸離資料庫:

  • 資料庫目前正在使用中。如需詳細資訊,請參閱本主題後面的<取得獨佔存取權>一節。

  • 如果已複寫,就表示已發行資料庫。

    在卸離資料庫之前,您必須先執行 sp_replicationdboption 來停用發行。

    [!附註]

    如果您無法使用 sp_replicationdboption,可執行 sp_removedbreplication 來移除複寫。

  • 資料庫有資料庫快照集存在。

    在卸離資料庫之前,您必須先卸除它的所有快照集。如需詳細資訊,請參閱<如何:卸除資料庫快照集 (Transact-SQL)>。

    [!附註]

    無法卸離或附加資料庫快照集。

  • 資料庫正在進行鏡像。

    在資料庫鏡像工作階段結束之前,您無法卸離資料庫。如需詳細資訊,請參閱<移除資料庫鏡像>。

  • 資料庫受質疑。

    在 SQL Server 2005 和更新版本中,您必須讓受質疑的資料庫進入緊急模式,然後才能卸離資料庫。如需有關如何使資料庫進入緊急模式的詳細資訊,請參閱<ALTER DATABASE (Transact-SQL)>。

  • 此資料庫是系統資料庫。

取得獨佔存取權

您需要有資料庫的獨佔存取權才能卸離資料庫。如果您要卸離的資料庫正在使用中,請先將資料庫設為 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';