移動系統資料庫

更新: 2008 年 11 月 17 日

本主題將描述如何在 SQL Server 2005 中移動系統資料庫。在下列狀況下移動系統資料庫可能非常有用:

  • 失敗復原。例如,資料庫因硬體失敗而進入質疑模式或被關閉。
  • 計劃的重新放置。
  • 重新放置排程的磁碟維護。

下列程序適用於在相同的 SQL Server 執行個體內移動資料庫檔案。若要將資料庫移到 SQL Server 的另一個執行個體或移到其他伺服器,請使用備份和還原卸離和附加作業。

本主題中的程序需要資料庫檔案的邏輯名稱。若要取得該名稱,請查詢 sys.master_files 目錄檢視中的 name 資料行。

ms345408.note(zh-tw,SQL.90).gif重要事項:
如果您移動了系統資料庫,接著重建 master 資料庫,就必須再次移動系統資料庫,因為重建作業會將所有系統資料庫安裝到預設的位置。如需有關重建 master 資料庫的詳細資訊,請參閱<如何:從命令提示字元安裝 SQL Server 2005>中的<重建系統資料庫、重建登錄>。

計劃的重新放置與排程的磁碟維謢程序

若要以計劃的重新放置或排程的維護作業來移動系統資料庫資料或記錄檔,請遵照下列步驟執行。此程序適用於 master 和資源資料庫以外的所有系統資料庫。

  1. 對於要移動的每個檔案執行下列陳述式。

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' )
    
  2. 停止 SQL Server 的執行個體或關閉系統以執行維護。如需詳細資訊,請參閱<停止服務>。

  3. 將一或多個檔案移到新位置。

  4. 重新啟動 SQL Server 的執行個體或伺服器。如需詳細資訊,請參閱<啟動和重新啟動服務>。

  5. 執行下列查詢以驗證檔案變更。

    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 的執行個體,請完成下列額外步驟。

  1. 透過執行下列查詢,確認已為 msdb 資料庫啟用 Service Broker。

    SELECT is_broker_enabled 
    FROM sys.databases
    WHERE name = N'msdb';
    

    如需有關啟用 Service Broker 的詳細資訊,請參閱<ALTER DATABASE (Transact-SQL)>。

  2. 透過傳送測試郵件,確認 Database Mail 是否可正常運作。如需詳細資訊,請參閱<Database Mail 疑難排解>。

失敗復原程序

如果因為硬體失敗必須移動檔案,請遵照下列步驟將檔案重新放置到新位置。此程序適用於 master 和資源資料庫以外的所有系統資料庫。

ms345408.note(zh-tw,SQL.90).gif重要事項:
如果無法啟動資料庫 (亦即,資料庫處於質疑模式或未復原的狀態下),就只有 sysadmin 固定角色的成員可以移動檔案。
  1. 如果 SQL Server 的執行個體已經啟動,請將它停止。

  2. 在命令提示字元下輸入下列其中一個命令,以僅限 master 的復原模式啟動 SQL Server 的執行個體。在這些命令中指定的參數要區分大小寫。如果未依照所示指定參數,命令將會失敗。

    • 如果是預設 (MSSQLSERVER) 執行個體,請執行下列命令:

      NET START MSSQLSERVER /f /T3608
      
    • 如果是具名執行個體,請執行下列命令:

      NET START MSSQL$instancename /f /T3608
      

    如需詳細資訊,請參閱<如何:啟動 SQL Server 的執行個體 (net 命令)>。

  3. 對於要移動的每個檔案,使用 sqlcmd 命令或 SQL Server Management Studio 來執行下列陳述式。

    ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' )
    

    如需有關使用 sqlcmd 公用程式的詳細資訊,請參閱<使用 sqlcmd 公用程式>。

  4. 結束 sqlcmd 公用程式或 SQL Server Management Studio。

  5. 停止 SQL Server 的執行個體。例如,請執行 NET STOP MSSQLSERVER

  6. 將一或多個檔案移到新位置。

  7. 重新啟動 SQL Server 的執行個體。例如,請執行 NET START MSSQLSERVER

  8. 執行下列查詢以驗證檔案變更。

    SELECT name, physical_name AS CurrentLocation, state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'<database_name>');
    

移動 master 和資源資料庫

資源資料庫會隨著 master 資料庫的位置而不同。資源資料和記錄檔必須一起存放,而且必須與 master 資料檔案 (master.mdf) 位於相同的位置。因此,如果移動 master 資料庫,您也必須將資源資料庫移到與 master 資料檔相同的位置。請不要將資源資料庫放置到壓縮或加密的 NTFS 檔案系統資料夾中。這麼做將會降低效能,而且會導致無法升級。

若要移動 master 和資源資料庫,請遵照下列步驟執行。

  1. [開始] 功能表上,依序指向 [所有程式][Microsoft SQL Server 2005][組態工具],然後按一下 [SQL Server 組態管理員]

  2. [SQL Server 2005 服務] 節點中,以滑鼠右鍵按一下 SQL Server 的執行個體 (例如 [SQL Server (MSSQLSERVER)]),然後選擇 [屬性]

  3. [SQL Server (instance_name) 屬性] 對話方塊中,按一下 [進階] 索引標籤。

  4. [啟動參數] 值編輯成指向 master 資料庫資料及記錄檔的規劃位置,然後按一下 [確定]。移動錯誤記錄檔是選擇性的。
    資料檔的參數值必須遵照 -d 參數,而記錄檔的值則必須遵照 -l 參數。下列範例顯示 master 資料與記錄檔的預設位置參數值。

    -dC:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG;-lC:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\mastlog.ldf
    

    如果 master 資料與記錄檔的規劃位置為 E:\SQLData,則必須將參數值更改如下:

    -dE:\SQLData\master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG;-lE:\SQLData\mastlog.ldf
    
  5. 以滑鼠右鍵按一下執行個體名稱並選擇 [停止],即可停止 SQL Server 的執行個體。

  6. 將 master.mdf 和 mastlog.ldf 檔移至新位置。

  7. 在命令提示字元下輸入下列其中一個命令,以僅限 master 的復原模式啟動 SQL Server 的執行個體。在這些命令中指定的參數要區分大小寫。如果未依照所示指定參數,命令將會失敗。

    • 如果是預設 (MSSQLSERVER) 執行個體,請執行下列命令。

      NET START MSSQLSERVER /f /T3608
      
    • 如果是具名執行個體,請執行下列命令。

      NET START MSSQL$instancename /f /T3608
      

    如需詳細資訊,請參閱<如何:啟動 SQL Server 的執行個體 (net 命令)>。

  8. 使用 sqlcmd 命令或 SQL Server Management Studio 執行下列陳述式。請變更 FILENAME 路徑,使其符合 master 資料檔案的新位置。請勿變更資料庫的名稱或檔案名稱。

    ALTER DATABASE mssqlsystemresource 
        MODIFY FILE (NAME=data, FILENAME= 'new_path_of_master\mssqlsystemresource.mdf');
    GO
    ALTER DATABASE mssqlsystemresource 
        MODIFY FILE (NAME=log, FILENAME= 'new_path_of_master\mssqlsystemresource.ldf');
    GO
    
  9. 將 mssqlsystemresource.mdf 和 mssqlsystemresource.ldf 檔案移至新位置。

  10. 執行下列陳述式,將資源資料庫設定成唯讀。

    ALTER DATABASE mssqlsystemresource SET READ_ONLY;
    
  11. 結束 sqlcmd 公用程式或 SQL Server Management Studio。

  12. 停止 SQL Server 的執行個體。

  13. 重新啟動 SQL Server 的執行個體。

  14. 執行下列查詢,驗證 master 資料庫的檔案變更。您不能使用系統目錄檢視或系統資料表檢視資源資料庫的中繼資料。

    SELECT name, physical_name AS CurrentLocation, state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID('master');
    GO
    

範例

A. 移動 tempdb 資料庫

下列範例會以計劃的重新放置,將 tempdb 資料和記錄檔移到新位置。

ms345408.note(zh-tw,SQL.90).gif附註:
由於在每次啟動 SQL Server 的執行個體時都會重新建立 tempdb,因此您不需要實際移動資料和記錄檔。在步驟 3 中重新啟動服務時,系統就會在新位置建立這些檔案。在重新啟動服務之前,tempdb 將繼續使用現有位置中的資料和記錄檔。
  1. 判斷 tempdb 資料庫的邏輯檔案名稱以及它們目前的磁碟位置。

    SELECT name, physical_name AS CurrentLocation
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
    GO
    
  2. 請利用 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
    
  3. 停止和重新啟動 SQL Server 執行個體。

  4. 確認檔案變更。

    SELECT name, physical_name AS CurrentLocation, state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
    
  5. 從原始位置中刪除 tempdb.mdf 和 templog.ldf 檔案。

請參閱

概念

資源資料庫
tempdb 資料庫
master 資料庫
msdb 資料庫
model 資料庫
移動使用者資料庫
停止服務

其他資源

移動資料庫檔案
啟動和重新啟動服務
ALTER DATABASE (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2008 年 11 月 17 日

更新的內容:
  • 新增資源資料和記錄檔必須與 master 資料檔案位於相同位置的需求。

2006 年 4 月 14 日

新增內容:
  • 新增有關在重建 master 資料庫後移動系統資料庫的重要注意事項。
更新的內容:
  • 修改移動 master 和 Resource 資料庫的程序。