附加資料庫
適用於:SQL Server
本文說明如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中連結資料庫。 您可以使用此功能來複製、移動或升級 SQL Server 資料庫。
限制與規定
如需限制和限制條件的清單,請參閱資料庫中斷連結與連結 (SQL Server)。
必要條件
繼續之前,請先檢閱下列所有必要條件:
如果您要將資料庫從某個執行個體移到另一個執行個體,則必須先中斷資料庫與任何現有 SQL 執行個體的連結。 如果您嘗試連結尚未中斷連結的資料庫,則會傳回錯誤。 如需詳細資訊,請參閱 卸離資料庫。
當您連結資料庫時,資料庫的所有資料檔案都必須可供使用。 通常,這些檔案的副檔名為 .mdf 或 .ndf (適用於資料檔案) 和 .ldf (適用於交易記錄檔)。 此外,FILESTREAM 資料的任何檔案群組都必須存在且可供使用。 如需連結已啟用 FILESTREAM 之資料庫的詳細資訊,請參閱移動已啟用 FILESTREAM 的資料庫。
如果資料檔案的路徑與資料庫第一次建立或最後一次附加時的路徑不同,您必須指定檔案的目前路徑。
資料庫引擎服務帳戶必須具有權限,才能讀取其新位置中的檔案。
在您連結資料庫時,如果 MDF 和 LDF 檔案位於不同的目錄,而且其中一個路徑包括
\\?\GlobalRoot
,作業將會失敗。
附加這個功能是最佳選擇嗎?
建議您在相同的執行個體內移動資料庫檔案時,使用 ALTER DATABASE
計劃的重新配置程序,而不要使用分離和附加。 如需詳細資訊,請參閱 移動使用者資料庫。
不建議針對備份和復原使用卸載和附加。 從 SQL Server 中斷連結要外部備份的檔案時,沒有交易記錄備份或時間點復原可用。
安全性
檔案存取權限會在執行許多資料庫作業時設定,包括卸載和載入資料庫時。 連結資料庫或中斷其連結時,資料庫引擎會嘗試模擬執行作業之連線的 Windows 帳戶,以確保該帳戶具有存取資料庫與記錄檔的權限。 對於使用 SQL Server 登入的混合安全性帳戶,模擬可能會失敗。
下表顯示在連結或中斷連結作業完成後資料庫和記錄檔上所設定的權限,以及資料庫引擎是否可模擬連接的帳戶。
作業 | 連接帳戶可能遭到模仿 | 將檔案權限授予給 |
---|---|---|
分離 | Yes | 僅限於正在執行操作的帳戶。 在中斷資料庫的連結後,如果作業系統管理員有需要,可以新增其他的帳戶。 |
分離 | 不 | SQL Server (MSSQLSERVER) 服務帳戶與本機 Windows 管理員群組的成員。 |
連結 | Yes | SQL Server (MSSQLSERVER) 服務帳戶及本機 Windows 管理員群組的成員。 |
連結 | 不 | SQL Server (MSSQLServer) 服務帳戶。 |
如需針對 SQL Server 服務授與個別服務 SID 的檔案系統權限詳細資訊,請參閱設定資料庫引擎存取的檔案系統權限。
警告
建議您不要附加或還原來源不明或來源不受信任的資料庫。 此類資料庫可能包含惡意程式碼,因此可能執行非預期的 Transact-SQL 程式碼,或是修改結構描述或實體資料庫結構而造成錯誤。 使用來源不明或來源不受信任的資料庫之前,請先在非實際執行伺服器的資料庫上執行 DBCC CHECKDB ,同時檢查資料庫中的程式碼,例如預存程序或其他使用者定義程式碼。 如需附加資料庫的詳細資訊,以及附加資料庫時,對中繼資料所做變更的相關資訊,請參閱 資料庫卸離與附加 (SQL Server)。
權限
需要 CREATE DATABASE
、CREATE ANY DATABASE
或 ALTER ANY DATABASE
權限。
使用 SQL Server Management Studio (SSMS)
移動資料庫之前
如果您要移動資料庫,在將資料庫與其現有的 SQL Server 執行個體中斷連結之前,請使用 [資料庫屬性] 頁面來檢閱與資料庫相關聯的檔案及其目前的位置。
在 SQL Server Management Studio 的物件總管中,連線到 SQL Server 資料庫引擎的執行個體,然後展開該執行個體。
展開 [資料庫] ,並選取您想要卸離的使用者資料庫名稱。
以滑鼠右鍵按一下資料庫名稱,然後選取 [屬性]。 選取 [檔案] 頁面,然後檢閱 [資料庫檔案:] 資料表中的項目。
把與資料庫相關聯的所有檔案都考慮在內,然後再執行分離、移動和掛載。 然後,繼續進行下一節中的分離資料庫、檔案複製和附加資料庫步驟。 如需詳細資訊,請參閱 卸離資料庫。
附加資料庫
在 SQL Server Management Studio 的物件總管中,連線到 SQL Server 資料庫引擎的執行個體,然後在 SSMS 中選擇展開該執行個體視圖。
以滑鼠右鍵按一下 [資料庫],然後選取 [附加]。
在 [連結資料庫] 對話方塊中,選取 [新增] 以指定要連結的資料庫。 在 [尋找資料庫檔案] 對話方塊中,選取資料庫所在的位置、展開目錄樹狀結構,尋找並選取資料庫的 .mdf 檔案,例如:
C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_Data.mdf
重要
嘗試選取已經附加的資料庫,會產生錯誤。
[要附加的資料庫]
顯示有關所選資料庫的資訊。<無欄標頭>
顯示指出附加作業之狀態的圖示。 可能的圖示將在 [狀態] 描述中加以描述。MDF 檔案位置
顯示選取之 MDF 檔的路徑和檔案名稱。Database Name
顯示資料庫的名稱。附加為...
選擇性地針對要附加的資料庫指定不同的名稱。擁有者
提供包含可能的資料庫擁有者的下拉式清單,且您可以選擇性地從中選取不同的擁有者。狀態
根據下表顯示資料庫的狀態:圖示 狀態文字 描述 (無圖示) (沒有文字) 連結作業尚未開始或可能正待執行針對此物件。 當對話方塊開啟時,這是預設的動作。 綠色、指向右方的三角形 進行中 附加作業已啟動,但尚未完成。 綠勾 成功 已順利附加物件。 包含白色十字的紅色圓圈 錯誤 附加作業發生錯誤,且未順利完成。 圓包含左、右兩個黑色區域以及上、下兩個白色區域。 已停止 連結作業未順利完成,因為您已停止作業。 包含指向逆時針方向之彎曲箭頭的圓圈 已回復 附加作業已順利完成,但是因為在附加其他物件的期間發生了錯誤,所以已將其回復。 訊息
顯示空白訊息或「找不到檔案」超連結。加入
尋找需要的主要資料庫檔案。 當您選取 .mdf 檔案時,適用的資訊會自動填入 [要連結的資料庫] 方格的對應欄位中。移除
從 [要附加的資料庫] 方格中移除選取的檔案。「<database_name>」資料庫詳細資料
顯示要附加之檔案的名稱。 若要確認或變更檔案的路徑名稱,請選取 [瀏覽] 按鈕 (...)。注意
如果檔案不存在,訊息資料行會顯示「找不到」。如果找不到記錄檔,代表該檔案位於另一個目錄,或已經刪除。 您必須更新 [資料庫詳細資料] 方格中的檔案路徑,以指向正確的位置,或是從方格中移除該記錄檔。 如果找不到 .ndf 資料檔,您就必須更新該檔案在方格中的路徑,以指向正確的位置。
原始檔案名稱
顯示屬於資料庫之附加檔案的名稱。檔案類型
指出檔案的類型,即 資料 或 記錄。目前的檔案路徑
顯示選取之資料庫檔案的路徑。 路徑可以用手動的方式編輯。訊息
顯示空白訊息或 「找不到檔案」 超連結。
使用 Transact-SQL
移動資料庫之前
如果您要移動資料庫,在將資料庫與其現有的 SQL Server 執行個體中斷連結之前,請使用 sys.database_files
系統目錄檢視來檢閱與資料庫相關聯的檔案及其目前的位置。 如需詳細資訊,請參閱 sys.database_files (Transact-SQL)。
在 SQL Server Management Studio 中,選取 [新增查詢] 以開啟查詢編輯器。
將下列 Transact-SQL 指令碼複製到查詢編輯器,然後選取 [執行]。 此指令碼會顯示實體資料庫檔案的位置。 透過分離/附加來移動資料庫時,請將所有檔案納入考量。
USE [database_name] GO SELECT type_desc, name, physical_name from sys.database_files;
在中斷連結、移動和連結之前,請務必將與資料庫相關聯的所有檔案納入考量。 然後,繼續進行在下一節中的分離、檔案複製和附加資料庫步驟。 如需詳細資訊,請參閱 卸離資料庫。
若要附加資料庫
連線至資料庫引擎。
在標準列上,選取 [新增查詢]。
搭配
FOR ATTACH
子句使用 CREATE DATABASE 陳述式。複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。 此範例會連結 AdventureWorks2022 資料庫的所有檔案,並將資料庫重新命名為
MyAdventureWorks
。CREATE DATABASE MyAdventureWorks ON (FILENAME = 'C:\MySQLServer\AdventureWorks_Data.mdf'), (FILENAME = 'C:\MySQLServer\AdventureWorks_Log.ldf') FOR ATTACH;
您的資料庫可能有其他資料檔案 (通常為 .mdf 或 .ndf),而且需要其他檔案才能包含在
CREATE DATABASE ... FOR ATTACH
陳述式中。 此外,FILESTREAM 資料的任何檔案群組也必須包含在陳述式中。 如需連結已啟用 FILESTREAM 之資料庫的詳細資訊,請參閱移動已啟用 FILESTREAM 的資料庫。注意
或者,您可以使用 sp_attach_db 或 sp_attach_single_file_db 預存程序。 但是,Microsoft SQL Server 的未來版本將移除這些程序。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 我們建議您改用
CREATE DATABASE ... FOR ATTACH
。
升級 SQL Server 資料庫之後
資料庫相容性層級
當您使用連結方法升級資料庫之後,該資料庫立即可用。 資料庫會自動升級至新執行個體的內部版本層級。 如果資料庫具有全文檢索索引,升級程序就會根據 [全文檢索目錄升級選項] 伺服器屬性的設定,匯入、重設或重建這些索引。 如果升級選項設定為 [匯入] 或 [重建],則全文檢索索引在升級期間無法使用。 根據進行索引的資料數量而定,匯入可能需要數個小時,而重建可能需要 10 倍以上的時間。 此外,請注意,當升級選項設定為 [匯入] 時,如果全文檢索目錄無法使用,系統就會重建相關聯的全文檢索索引。
升級之後,除非新版本不支援先前的相容性層級,否則資料庫相容性層級會維持在升級之前的相容性層級。 在此情況下,升級的資料庫相容性層級會設定為最低支援的相容性層級。 例如,在將相容性層級 90 的資料庫附加至 SQL Server 2019 (15.x) 的執行個體之前,若您附加該資料庫,則在升級後,相容性層級會設定為 100,這是 SQL Server 2019 (15.x) 中支援的最低相容性層級。 如需詳細資訊,請參閱 ALTER DATABASE 相容性層級 (Transact-SQL)。
異動資料擷取 (CDC)
如果您從 SQL Server 2014 (12.x) 或更早版本的執行個體連結已啟用異動資料擷取 (CDC) 的資料庫,則必須執行下列命令來升級異動資料擷取 (CDC) 中繼資料:
USE <database name>
EXEC sys.sp_cdc_vupgrade
如需詳細資訊,請參閱在 Windows 上將已啟用 CDC 的資料庫連結至 SQL Server 2016 或 SQL Server 2017 執行個體時發生錯誤。