本主題描述如何在 SQL Server 中移動系統資料庫。 在下列情況下,移動系統資料庫可能很有用:
故障復原。 例如,資料庫因硬體故障而處於疑問模式或已被關閉。
計畫遷移。
為排定的磁碟維護進行遷移。
下列程序適用於在相同 SQL Server 執行個體內移動資料庫檔案。 若要將資料庫移至另一個 SQL Server 實例或另一部伺服器,請使用 備份和還原 或 卸離和附加 作業。
本主題中的程式需要資料庫檔案的邏輯名稱。 若要取得名稱,請在 sys.master_files 目錄檢視中查詢名稱資料行。
這很重要
如果您移動系統資料庫,稍後重建 master 資料庫,您必須再次移動系統資料庫,因為重建作業會將所有系統資料庫安裝到其預設位置。
本主題內容
計劃搬遷和排程的磁碟維護流程
若要將系統資料庫資料或記錄檔移動為計劃內重新放置或排程維護作業的一部分,請遵循下列步驟。 此程式適用於 master 和 Resource 資料庫以外的所有系統資料庫。
若要移動每個檔案,請執行下列陳述式。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' )停止 SQL Server 的實例,或關閉系統以執行維護。 如需詳細資訊,請參閱啟動、停止、暫停、繼續、重啟資料庫引擎、SQL Server Agent 或 SQL Server Browser 服務。
將一個或多個檔案移至新位置。
重新啟動 SQL Server 或伺服器的執行個體。 如需詳細資訊,請參閱啟動、停止、暫停、繼續、重啟資料庫引擎、SQL Server Agent 或 SQL Server Browser 服務。
執行下列查詢來確認檔案變更。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
如果移動 msdb 資料庫,且已針對 Database Mail 設定 SQL Server 實例,請完成這些額外的步驟。
執行下列查詢,確認已針對 msdb 資料庫啟用 Service Broker。
SELECT is_broker_enabled FROM sys.databases WHERE name = N'msdb';如需啟用 Service Broker 的詳細資訊,請參閱 ALTER DATABASE (Transact-SQL) 。
藉由傳送測試郵件來確認 Database Mail 是否正常運作。
故障復原程序
如果由於硬體故障而必須移動檔案,請遵循下列步驟,將檔案重新放置到新位置。 此程式適用於 master 和 Resource 資料庫以外的所有系統資料庫。
這很重要
如果資料庫無法啟動,也就是處於可疑模式或未復原狀態,只有系統管理員固定角色的成員才能移動檔案。
如果 SQL Server 實例已啟動,請停止實例。
在命令提示字元中輸入以下其中一個命令,以主控恢復模式啟動 SQL Server 的執行個體。 這些命令中指定的參數會區分大小寫。 未如所示指定參數時,命令會失敗。
針對預設的 (MSSQLSERVER) 執行個體,執行下列命令:
NET START MSSQLSERVER /f /T3608對於具名的實例,請執行下列命令:
NET START MSSQL$instancename /f /T3608
如需詳細資訊,請參閱啟動、停止、暫停、繼續、重啟資料庫引擎、SQL Server Agent 或 SQL Server Browser 服務。
若要移動每個檔案,請使用 sqlcmd 命令或 SQL Server Management Studio 來執行下列陳述式。
ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' )如需使用 sqlcmd 公用程式的詳細資訊,請參閱 使用 sqlcmd 公用程式。
離開 sqlcmd 公用程式或 SQL Server Management Studio。
停止 SQL Server 的執行個體。 例如,執行
NET STOP MSSQLSERVER。將一個或多個檔案移至新位置。
重新啟動 SQL Server 的執行個體。 例如,執行
NET START MSSQLSERVER。執行下列查詢來確認檔案變更。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
移動主資料庫
若要移動 master 資料庫,請遵循下列步驟。
從 [ 開始] 功能表,指向 [ 所有程式],指向 [Microsoft SQL Server],指向 [ 組態工具],然後單擊 [ SQL Server 組態管理員]。
在 SQL Server 服務節點中,以滑鼠右鍵按一下 SQL Server 執行個體 (例如 SQL Server (MSSQLSERVER),然後選擇屬性。
在 [ SQL Server (instance_name) 屬性 ] 對話框中,按兩下 [ 啟動參數 ] 索引標籤。
在 [ 現有參數] 方塊中,選取要移動主要數據檔的 -d 參數。 按兩下 [更新] 以儲存變更。
在 [ 指定啟動參數] 方塊中,將 參數變更為 master 資料庫的新路徑。
在 [ 現有參數] 方塊中,選取要移動主要記錄檔的 -l 參數。 按兩下 [更新] 以儲存變更。
在 [ 指定啟動參數] 方塊中,將 參數變更為 master 資料庫的新路徑。
資料檔案的參數值必須遵循
-d參數,而記錄檔的值必須遵循-l參數。 下列範例顯示主要數據檔之預設位置的參數值。-dC:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\master.mdf-lC:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\mastlog.ldf如果主數據檔的計劃重新配置為
E:\SQLData,參數值將會變更,如下所示:-dE:\SQLData\master.mdf-lE:\SQLData\mastlog.ldf以滑鼠右鍵按一下執行個體名稱並選擇 [停止],以停止 SQL Server 的執行個體。
將master.mdf和 mastlog.ldf 檔案移至新位置。
重新啟動 SQL Server 的執行個體。
執行下列查詢來確認 master 資料庫的檔案變更。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID('master'); GO
移動資源資料庫
資源資料庫的位置是 <磁碟驅動器>:\Program Files\Microsoft SQL Server\MSSQL<版本>。<instance_name>\MSSQL\Binn\. 無法移動資料庫。
後續步驟:在移動所有系統資料庫之後
如果您已將所有系統資料庫移至新的磁碟驅動器或磁碟區或具有不同驅動器號的另一部伺服器,請進行下列更新。
變更 SQL Server Agent 記錄路徑。 如果您未更新此路徑,SQL Server Agent 將無法啟動。
變更資料庫預設位置。 如果指定為預設位置的驅動器號和路徑不存在,建立新的資料庫可能會失敗。
變更 SQL Server Agent 記錄路徑
從 SQL Server Management Studio,在 [物件總管] 中,展開 [SQL Server Agent]。
以滑鼠右鍵按兩下 [ 錯誤記錄] ,然後按兩下 [ 設定]。
在 [設定 SQL Server Agent 錯誤記錄檔] 對話框中,指定 SQLAGENT.OUT 檔案的新位置。 默認位置為 C:\Program Files\Microsoft SQL Server\MSSQL12。<instance_name>\MSSQL\Log\。
變更資料庫預設位置
從 SQL Server Management Studio 的 [物件總管] 中,以滑鼠右鍵點擊 SQL Server 伺服器,然後點選 [屬性]。
在 [伺服器屬性] 對話框中,選取 [資料庫設定]。
在 [資料庫預設位置] 下,瀏覽至資料和記錄檔的新位置。
停止並啟動 SQL Server 服務以完成變更。
範例
A。 移動tempdb資料庫
做為計劃內重新放置的一部分,下列範例會將 tempdb 資料和記錄檔移至新位置。
備註
因為 tempdb 會在每次啟動 SQL Server 實例時重新建立,因此您不需要實際地移動資料和記錄檔。 在步驟 3 中重新啟動服務時,會在新位置建立檔案。 在服務重新啟動之前,tempdb 會繼續使用現有位置中的數據和記錄檔。
判定
tempdb資料庫的邏輯檔案名稱,及其目前在磁碟中的位置。SELECT name, physical_name AS CurrentLocation FROM sys.master_files WHERE database_id = DB_ID(N'tempdb'); GO請利用
ALTER DATABASE來變更每個檔案的位置。USE master; GO ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf'); GO ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'F:\SQLLog\templog.ldf'); GO停止 SQL Server 的執行個體並重新啟動。
確認檔案變更。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'tempdb');從原始位置刪除
tempdb.mdf和templog.ldf檔案。
另請參閱
資源資料庫
tempdb 資料庫
master 資料庫
msdb 資料庫
model Database
移動使用者資料庫
移動資料庫檔案
啟動、停止、暫停、繼續或重新啟動資料庫引擎、SQL Server 代理或 SQL Server 瀏覽器服務
ALTER DATABASE (Transact-SQL)
重建系統資料庫