移動系統資料庫
本主題描述如何在 SQL Server 中移動系統資料庫。 在下列狀況下移動系統資料庫可能非常有用:
失敗復原。 例如,資料庫因硬體失敗而進入質疑模式或被關閉。
計畫的重新放置。
排程的磁碟維護重新放置。
下列程式適用于在SQL Server相同實例內移動資料庫檔案。 若要將資料庫移至另一個SQL Server實例或另一部伺服器,請使用備份和還原或中斷連結作業。
本主題中的程序需要資料庫檔案的邏輯名稱。 若要取得該名稱,請查詢 sys.master_files 目錄檢視中的 name 資料行。
重要
如果您移動了系統資料庫,接著重建 master 資料庫,就必須再次移動系統資料庫,因為重建作業會將所有系統資料庫安裝到預設的位置。
本主題內容
計畫的重新放置與排程的磁碟維謢程序
若要以計畫的重新放置或排程的維護作業來移動系統資料庫資料或記錄檔,請遵照下列步驟執行。 此程序適用於 master 和 Resource 資料庫以外的所有系統資料庫。
對於要移動的每個檔案執行下列陳述式。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' )
停止SQL Server實例或關閉系統以執行維護。 如需詳細資訊,請參閱 启动、停止、暂停、继续、重启 SQL Server 服务。
將一個或多個檔案移到新位置。
重新開機 SQL Server 或伺服器的實例。 如需詳細資訊,請參閱 启动、停止、暂停、继续、重启 SQL Server 服务。
執行下列查詢以驗證檔案變更。
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 資料庫以外的所有系統資料庫。
重要
如果無法啟動資料庫,也就是資料庫在質疑模式下或在無法復原的狀態下,只有 sysadmin 固定角色的成員可以移動檔案。
如果啟動實例,請停止SQL Server實例。
在命令提示字元中輸入下列其中一個命令,以在僅限主要復原模式中啟動SQL Server實例。 在這些命令中指定的參數要區分大小寫。 如果未依照所示指定參數,命令將會失敗。
如果是預設 (MSSQLSERVER) 執行個體,請執行下列命令:
NET START MSSQLSERVER /f /T3608
如果是具名執行個體,請執行下列命令:
NET START MSSQL$instancename /f /T3608
如需詳細資訊,請參閱 启动、停止、暂停、继续、重启 SQL Server 服务。
若要移動每個檔案,請使用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 資料庫
若要移動 master 資料庫,請遵循下列步驟。
從 [開始] 功能表上,依序指向 [程式集] 、 [Microsoft SQL Server] 和 [組態工具] ,再按一下 [SQL Server 組態管理員] 。
在[SQL Server服務] 節點中,以滑鼠右鍵按一下 SQL Server (實例,例如,SQL Server (MSSQLSERVER) ) ,然後選擇 [屬性]。
在[SQL Server (instance_name) [屬性] 對話方塊中,按一下 [啟動參數] 索引標籤。
在 [現有參數] 方塊中,選取 -d 參數來移動 master 資料檔案。 按一下 [更新] 來儲存變更。
在 [指定啟動參數] 方塊中,將參數變更為 master 資料庫的新路徑。
在 [現有參數] 方塊中,選取 -l 參數來移動 master 記錄檔。 按一下 [更新] 來儲存變更。
在 [指定啟動參數] 方塊中,將參數變更為 master 資料庫的新路徑。
資料檔案的參數值必須遵照
-d
參數,而記錄檔的值則必須遵照-l
參數。 下列範例顯示 master 資料檔案的預設位置參數值。-dC:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\master.mdf
-lC:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
如果 master 資料檔案計畫的重新放置為
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
移動 Resource 資料庫
資源資料庫的位置為 <drive> :\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
檔案。
另請參閱
Resource 資料庫
tempdb 資料庫
master 資料庫
msdb 資料庫
model 資料庫
移動使用者資料庫
移動資料庫檔案
啟動、停止、暫停、繼續、重新啟動 Database Engine、SQL Server Agent 或 SQL Server Browser 服務
ALTER DATABASE (Transact-SQL)
重建系統資料庫