資料庫卸離和附加 (SQL Server)
適用於:SQL Server
您可以將資料庫的資料和交易記錄檔中斷連結,然後再重新附加至相同或不同的 SQL Server 執行個體。 若要將資料庫變更至同一台電腦上的不同 SQL Server 執行個體,或要移動資料庫,卸離和附加資料庫相當有用。
權限
檔案訪問許可權是在數個資料庫作業期間設定,包括卸離或附加資料庫。
重要
我們建議您不要從未知或未受信任的來源附加或還原資料庫。 此類資料庫可能包含惡意程式碼,因此可能執行非預期的 Transact-SQL 程式碼,或是修改結構描述或實體資料庫結構而造成錯誤。 在您從未知或不受信任的來源使用資料庫之前,請在非生產伺服器上的資料庫上執行 DBCC CHECKDB (Transact-SQL), 並在資料庫中檢查程式代碼,例如預存程式或其他使用者定義的程式代碼。
將資料庫中斷連結
卸離資料庫時會從 SQL Server 執行個體移除該資料庫,但會保留資料庫中的資料檔和交易記錄檔。 您可使用這些檔案將資料庫附加到任何 SQL Server 執行個體,包括已卸離該資料庫的伺服器。
如果下列任一項成立,您就無法中斷連結資料庫:
資料庫已複寫和發行。 如果複寫的話,必須取消發行資料庫。 在卸離資料庫之前,您必須先執行 sp_replicationdboption以停用發行。
注意
如果您無法使用
sp_replicationdboption
,您可以執行 sp_removedbreplication 來移除複寫。資料庫有資料庫快照集存在。
在卸離資料庫之前,您必須先卸除它的所有快照集。 如需詳細資訊,請參閱卸除資料庫快照集 (Transact-SQL)。
注意
資料庫快照集無法中斷連結或附加。
資料庫是 Always On 可用性群組的一部分。
資料庫在從可用性群組中移除之前,無法中斷連結。 如需詳細資訊,請參閱將主要資料庫從 Always On 可用性群組移除。
資料庫正在資料庫鏡像工作階段中進行鏡像。
除非會話終止,否則無法卸離資料庫。 如需詳細資訊,請參閱移除資料庫鏡像 (SQL Server)。
資料庫受質疑。 可疑的資料庫無法中斷連結;您必須先將其放入緊急模式,才能將其中斷連結。 如需有關如何使資料庫進入緊急模式的詳細資訊,請參閱 ALTER DATABASE (Transact-SQL)。
此資料庫是系統資料庫。
備份、還原和卸離
卸離唯讀資料庫會失去有關差異備份之差異基底的資訊。 如需詳細資訊,請參閱差異備份 (SQL Server)。
回應中斷連結錯誤
若在卸離資料庫時發生錯誤,資料庫將無法完全關閉,也無法重建交易記錄檔。 若您收到錯誤訊息,請執行下列訂正動作:
重新附加所有與資料庫關聯的檔案,而非只有主要檔案。
解決造成錯誤訊息的問題。
再次卸離資料庫。
附加資料庫
您可以附加複製的或卸離的 SQL Server 資料庫。 當您將包含全文檢索目錄檔案的 SQL Server 2005 (9.x) 資料庫附加至 SQL Server 伺服器執行個體時,系統會從先前的位置附加這些目錄檔案以及其他資料庫檔案,如同 SQL Server 2005 (9.x) 的行為一樣。 如需詳細資訊,請參閱 升級全文檢索搜尋。
當您附加資料庫時,所有數據檔(.mdf
和 .ndf
檔案)都必須可供使用。 如果資料檔案的路徑與資料庫第一次建立或最後一次附加時的路徑不同,您必須指定檔案的目前路徑。
注意
如果附加的主要資料檔是唯讀的,則資料庫引擎會假設該資料庫也是唯讀。
當加密的資料庫第一次附加至 SQL Server 實例時,資料庫擁有者必須執行下列語句來開啟資料庫主要密鑰 (DMK): OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'
。 建議您執行下列語句來啟用 DMK 的自動解密: ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
。 如需詳細資訊,請參閱 CREATE MASTER KEY (Transact-SQL) 和 ALTER MASTER KEY (Transact-SQL)。
要不要附加記錄檔,其需求有一部分視資料庫是可讀寫或唯讀而定,如下所示:
如果是讀寫資料庫,您通常可以在新位置附加記錄檔。 不過,某些情況下,重新附加資料庫需要其現有的記錄檔。 因此,請務必一律保留所有中斷鏈接的記錄檔,直到成功附加資料庫,而不需要它們。
如果讀寫資料庫具有單一記錄檔,而且您未指定記錄檔的新位置,則附加作業會在檔案的舊位置中尋找。 如果找到舊的記錄檔,不論資料庫是否已完全關閉,都會使用它。 不過,如果找不到舊的記錄檔,而且如果資料庫已完全關閉且沒有作用中的記錄鏈結,則附加作業會嘗試為資料庫建置新的記錄檔。
如果附加的主要資料檔是唯讀的,則資料庫引擎會假設該資料庫也是唯讀。 如果是讀寫資料庫,在資料庫主要檔案所指定的位置一定會有一或多個記錄檔。 無法建置新的記錄檔,因為 SQL Server 無法更新儲存在主要檔案中的記錄位置。
附加資料庫的元數據變更
卸離後再重新附加唯讀資料庫時,會遺失目前差異基底的備份資訊。 「差異基底」 (Differential Base) 是資料庫或資料庫之檔案或檔案群組子集中所有資料的最新完整備份。 如果沒有基底備份資訊, master
資料庫就會與只讀資料庫同步處理,因此之後進行的差異備份可能會提供非預期的結果。 因此,如果您使用差異備份搭配唯讀資料庫,您應該在重新附加資料庫之後進行完整備份來建立新的差異基底。 如需差異備份的相關信息,請參閱差異備份(SQL Server)。
附加時會啟動資料庫。 一般來說,附加資料庫時,會將資料庫設定為先前卸離或複製時的相同狀態。 不過,附加與卸離作業會停用資料庫的跨資料庫擁有權鏈結。 如需如何啟用鏈結的相關資訊,請參閱 跨資料庫擁有權鏈結伺服器組態選項。
重要
根據預設且為了安全起見,每當附加資料庫時,is_broker_enabled、is_honor_broker_priority_on 和 is_trustworthy_on 的選項都會設定為 OFF。 如需如何將這些選項設定為 ON 的資訊,請參閱 ALTER DATABASE (Transact-SQL)。 如需元數據的詳細資訊,請參閱 管理在另一部伺服器上提供資料庫時的元數據。
備份、還原和附加
與完全或部分離線的任何資料庫一樣,無法附加具有還原檔案的資料庫。 如果停止還原順序,則可以附加資料庫。 然後,還是可以重新啟動還原順序。
將資料庫附加至另一個伺服器實例
重要
較新版本的 SQL Server 所建立的資料庫無法在舊版中附加。 這可防止實際使用的資料庫搭配舊版的資料庫引擎。 不過,這與元數據狀態相關,而且不會影響 資料庫相容性層級。 如需詳細資訊,請參閱 ALTER DATABASE (Transact-SQL) 相容性層級。
若要為使用者和應用程式提供一致的體驗,當您將資料庫附加至另一個伺服器實例時,您可能必須為其他伺服器實例上的資料庫重新建立部分或所有元數據。 此元數據包含登入和作業等。 如需詳細資訊,請參閱 在另一部伺服器上提供資料庫時管理元數據。
相關工作
Task | 發行項 |
---|---|
將資料庫中斷連結 | - sp_detach_db (Transact-SQL) - 將資料庫中斷連結 |
附加資料庫 | - CREATE DATABASE - 附加資料庫 - sp_attach_db (Transact-SQL) - sp_attach_single_file_db (Transact-SQL) |
使用卸離和附加作業升級資料庫 | - 使用卸離和附加來升級資料庫 (Transact-SQL) |
使用卸離和附加作業來移動資料庫 | - 使用卸離和附加來移動資料庫 (Transact-SQL) |
刪除資料庫快照集 | - 卸除資料庫快照集 (Transact-SQL) |
相關內容
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應