卸離和附加資料庫

更新: 2006 年 12 月 12 日

您可以將資料庫的資料和交易記錄檔卸離,然後再重新附加至相同或不同的 SQL Server 執行個體。若要將資料庫變更至同一台電腦上的不同 SQL Server 執行個體,或要移動資料庫,卸離和附加資料庫相當有用。

ms190794.note(zh-tw,SQL.90).gif附註:
64 位元和 32 位元環境中的 SQL Server 磁碟儲存格式是相同的。因此,附加作業可以跨 32 位元和 64 位元環境執行。從在其中一種環境執行的伺服器執行個體卸離資料庫,可以附加到在另一種環境執行的伺服器執行個體。
ms190794.note(zh-tw,SQL.90).gif附註:
如需有關卸離和附加資料庫時所設定之檔案權限的資訊,請參閱<保護資料和記錄檔>。

卸離資料庫

卸離資料庫時會從 SQL Server 執行個體移除該資料庫,但會保留資料庫中的資料檔和交易記錄檔。您可使用這些檔案將資料庫附加到任何 SQL Server 執行個體,包括已卸離該資料庫的伺服器。

如果下列任一情況為真,則您不能卸離資料庫:

  • 資料庫已複寫和發行。如果複寫的話,必須取消發行資料庫。在卸離資料庫之前,您必須先執行 sp_replicationdboption 以停用發行。
    ms190794.note(zh-tw,SQL.90).gif附註:
    如果您無法使用 sp_replicationdboption,可執行 sp_removedbreplication 來移除複寫。
  • 資料庫有資料庫快照集存在。
    在卸離資料庫之前,您必須先卸除它的所有快照集。如需詳細資訊,請參閱<如何:卸除資料庫快照集 (Transact-SQL)>。
    ms190794.note(zh-tw,SQL.90).gif附註:
    無法卸離或附加資料庫快照集。
  • 資料庫正在資料庫鏡像工作階段中進行鏡像。
    除非工作階段結束,否則,您無法卸離資料庫。如需詳細資訊,請參閱<移除資料庫鏡像>。
  • 資料庫有疑問。在 SQL Server 2005 中,您無法卸離質疑的資料庫,必須先將質疑的資料庫設定為緊急模式,才能將其卸離。如需有關如何使資料庫進入緊急模式的詳細資訊,請參閱<ALTER DATABASE (Transact-SQL)>。
  • 此資料庫是系統資料庫。

卸離資料庫會清除 SQL Server 執行個體的計劃快取。清除計劃快取會導致重新編譯所有後續執行計劃,而且可能會導致查詢效能突然暫時下降。在 SQL Server 2005 Service Pack 2 中,針對每次清除計劃快取的快取存放區,SQL Server 錯誤記錄檔會包含下列參考訊息:「由於某些資料庫維護或重新設定作業,SQL Server 的 '%s' 快取存放區 (計劃快取的一部分) 發生 %d 次快取存放區排清。」只要快取發生排清,這個訊息就會每五分鐘記錄一次。

卸離資料庫

備份和還原與卸離

卸離唯讀資料庫會失去有關差異備份之差異基底的資訊。如需詳細資訊,請參閱<備份唯讀資料庫>。

回應卸離錯誤

若在卸離資料庫時發生錯誤,資料庫將無法完全關閉,也無法重建交易記錄檔。若您收到錯誤訊息,請執行下列訂正動作:

  1. 重新附加所有與資料庫關聯的檔案,而非只有主要檔案。
  2. 解決造成錯誤訊息的問題。
  3. 再次卸離資料庫。

附加資料庫

您可以附加複製的或卸離的 SQL Server 資料庫。在 SQL Server 2005 中,屬於資料庫的全文檢索檔案也會跟資料庫一起附加。如需詳細資訊,請參閱<附加與卸離全文檢索目錄>。

ms190794.security(zh-tw,SQL.90).gif安全性注意事項:
建議您不要附加或還原來源不明或來源不受信任的資料庫。這種資料庫可能包含惡意程式碼,因此可能執行非預期的 Transact-SQL 程式碼,或是修改結構描述或實體資料庫結構而造成錯誤。使用來源不明或來源不受信任的資料庫之前,請先在非實際伺服器中的資料庫上執行 DBCC CHECKDB,同時檢查資料庫中的程式碼,例如預存程序或其他使用者自訂程式碼。

附加時會啟動資料庫。一般說來,附加資料庫時,會將資料庫設定為先前卸離或複製時的相同狀態。不過,在 SQL Server 2005 中,附加和卸離作業都會停用資料庫的跨資料庫擁有權鏈結。如需有關如何啟用鏈結的詳細資訊,請參閱<cross db ownership chaining 選項>。同時,每當附加資料庫時,TRUSTWORTHY 都會設為 OFF。如需有關如何將 TRUSTWORTHY 設為 ON 的詳細資訊,請參閱<ALTER DATABASE (Transact-SQL)>。

當您附加資料庫時,所有的資料檔 (MDF 和 NDF 檔案) 都必須可供使用。如果資料檔的路徑與資料庫第一次建立或最後一次附加時的路徑不同,您必須指定檔案的目前路徑。

ms190794.note(zh-tw,SQL.90).gif附註:
如果附加的主要資料檔是唯讀的,則 Database Engine 會假設該資料庫也是唯讀的。

第一次將加密的資料庫附加到 SQL Server 執行個體時,資料庫擁有者必須執行下列陳述式來開啟資料庫的主要金鑰:OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'。建議您執行下列陳述式來啟用主要金鑰的自動解密:ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY。如需詳細資訊,請參閱<CREATE MASTER KEY (Transact-SQL)>和<ALTER MASTER KEY (Transact-SQL)>。

要不要附加記錄檔,其需求有一部分視資料庫是可讀寫或唯讀而定,如下所示:

  • 如果是讀寫資料庫,您通常可以在新位置附加記錄檔。不過,某些情況下,重新附加資料庫需要其現有的記錄檔。因此,請務必保留所有卸離的記錄檔,直到資料庫在沒有這些檔案的情形下成功附加為止。
    如果讀寫資料庫具有單一記錄檔,而您未指定新位置給該記錄檔,附加作業就會在舊位置尋找該檔案。如果找到,就會使用舊的記錄檔,不論資料庫是否完全關閉。不過,如果找不到舊記錄檔,且資料庫已完全關閉而無使用中的記錄鏈結,附加作業便會嘗試為該資料庫建立新的記錄檔。如需詳細資訊,請參閱<瞭解交易記錄架構>。
  • 如果附加的主要資料檔是唯讀的,則 Database Engine 會假設該資料庫也是唯讀的。如果是讀寫資料庫,在資料庫主要檔案所指定的位置一定會有一或多個記錄檔。由於 SQL Server 無法更新儲存在主要檔案中的記錄檔位置,所以無法建立新記錄檔。
    ms190794.note(zh-tw,SQL.90).gif重要事項:
    卸離後再重新附加讀寫資料庫時,會遺失差異基底資訊。這會造成 master 資料庫與讀寫資料庫不同步。在此作業後進行差異備份可能會產生無法預期的結果。因此,如果在讀寫資料庫使用差異備份,重新附加資料庫後,應該利用完整備份來建立目前的差異基底。

備份和還原與附加

就像任何完全或部分離線的資料庫一樣,內含還原中檔案的資料庫是無法附加的。如果停止還原順序,則可以附加資料庫。然後,還是可以重新啟動還原順序。

將資料庫附加至另一個伺服器執行個體

將資料庫附加至另一個伺服器執行個體時,為了提供一致的經驗給使用者和應用程式,您可能會需要在其他伺服器執行個體上為資料庫重新建立部分或所有中繼資料,例如登入和作業。如需詳細資訊,請參閱<在另一個伺服器執行個體上提供可用的資料庫時,管理中繼資料>。

ms190794.note(zh-tw,SQL.90).gif附註:
以較新的 SQL Server 版本建立的資料庫不能附加在較舊的版本中。
ms190794.note(zh-tw,SQL.90).gif附註:
附加可以使用 Vardecimal 儲存格式正常運作。但是每個 Database Engine 都必須升級為 SQL Server 2005 Service Pack 2 (含) 以上,而且所有相關資料庫必須啟用 Vardecimal 儲存格式。例如,您不能將已啟用 Vardecimal 儲存格式的 Service Pack 2 資料庫附加到較舊的 SQL Server 版本。如需有關 Vardecimal 儲存格式的詳細資訊,請參閱<將十進位資料儲存成可變長度>。

附加資料庫

從舊版 SQL Server 升級資料庫

在 SQL Server 2005 中,您可以使用卸離和附加作業,將使用者資料庫從 SQL Server  7.0 版或 SQL Server 2000 升級。不過,會有下列限制:

  • mastermodelmsdb 等資料庫的副本若是使用 SQL Server 7.0 或 SQL Server 2000 所建立,則無法在 SQL Server 2005 附加。
  • 包含建立索引作業的 SQL Server 7.0 記錄檔無法附加於 SQL Server 2000 或 SQL Server 2005。
  • 如果附加複製的 (而非卸離的) 複寫資料庫:
    • 如果您將資料庫附加到相同伺服器執行個體的升級版本,則必須在附加作業完成後,執行 sp_vupgrade_replication 以升級複寫。如需詳細資訊,請參閱<sp_vupgrade_replication (Transact-SQL)>。
    • 如果您將資料庫附加至不同的伺服器執行個體 (不論版本為何),則必須在附加作業完成後,執行 sp_removedbreplication 以移除複寫。如需詳細資訊,請參閱<sp_removedbreplication (Transact-SQL)>。

使用卸離和附加作業來升級資料庫

移動資料庫或資料庫檔案

ms190794.note(zh-tw,SQL.90).gif重要事項:
建議您使用 ALTER DATABASE 規劃的重新配置程序來移動資料庫,而不要使用卸離和附加作業。如需詳細資訊,請參閱<移動資料庫檔案>。

您通常可以使用卸離和附加作業來移動資料庫。一般狀況包括將資料庫移到下列其中一個位置:

  • 相同電腦上的不同實體磁碟。例如,當包含資料檔的磁碟空間不足,而您想要擴充現有的檔案 (而不是在別的磁碟中加入新檔案以擴充資料庫) 時。
  • 不同的電腦上,而不必重建資料庫和還原資料庫備份。

使用卸離和附加作業來移動資料庫包括下列階段:

  1. 正在卸離資料庫。
  2. 將資料庫檔案移到其他伺服器或磁碟。
  3. 指定所移動之檔案的新位置來附加資料庫。

使用卸離和附加作業來移動資料庫

請參閱

概念

卸離和附加資料庫
保護資料和記錄檔
瞭解檔案及檔案群組

其他資源

CREATE DATABASE (Transact-SQL)
sp_detach_db (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 12 月 12 日

新增內容:
  • 新增關於 64 位元和 32 位元環境具有相同 SQL Server 磁碟儲存格式的附註。
  • 在<將資料庫附加至另一個伺服器執行個體>一節中新增附註。
  • 新增關於 Vardecimal 儲存格式的附註。

2006 年 7 月 17 日

新增內容:
  • 將清除計劃快取的相關資訊加入<卸離資料庫>一節。

2006 年 7 月 17 日

新增內容:
  • 新增卸離系統資料庫的限制。
  • 新增「備份和還原與卸離」一節。
  • 新增「備份和還原與附加」一節。

2005 年 12 月 5 日

新增內容:
  • 新增「安全性注意事項」。