共用方式為


移動使用者資料庫

在 SQL Server 中,您可以在 ALTER DATABASE 語句的 FILENAME 子句中指定新的檔案位置,將使用者資料庫的數據、記錄檔和全文檢索目錄檔案移至新位置。 此方法適用於在相同執行個體 SQL Server 內移動資料庫檔案。 若要將資料庫移至另一個 SQL Server 執行個體或另一部伺服器,請使用備份與還原或分離和附加作業。

考慮事項

當您將資料庫移至另一個伺服器實例時,若要為使用者和應用程式提供一致的體驗,您可能必須重新建立資料庫的某些或所有元數據。 如需詳細資訊,請參閱在另一個伺服器執行個體 (SQL Server) 上提供可用的資料庫時管理中繼資料

SQL Server 資料庫引擎的某些功能可變更資料庫引擎將資訊存放在資料庫檔案的方式。 這些功能限於特定版本的 SQL Server。 包含這些功能的資料庫無法移至不支援這些功能的 SQL Server 版本。 使用sys.dm_db_persisted_sku_features動態管理檢視,列出目前資料庫中啟用的所有版本特定功能。

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

從 SQL Server 2008 R2 開始,全文檢索目錄會整合到資料庫中,而不是儲存在文件系統中。 當您移動資料庫時,全文檢索目錄現在會自動移動。

計劃搬遷程序

若要作為計劃遷移的一部分搬移資料檔或日誌檔,請遵循下列步驟:

  1. 執行下列陳述式。

    ALTER DATABASE database_name SET OFFLINE;  
    
  2. 將一個或多個檔案移至新位置。

  3. 針對已移動的每個檔案,執行下列語句。

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' );  
    
  4. 執行下列陳述式。

    ALTER DATABASE database_name SET ONLINE;  
    
  5. 執行下列查詢來確認檔案變更。

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

排程磁碟維護的重新配置

若要在排程磁碟維護程序中重新放置檔案,請遵循下列步驟:

  1. 若要移動每個檔案,請執行下列陳述式。

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' );  
    
  2. 停止 SQL Server 的實例,或關閉系統以執行維護。 如需詳細資訊,請參閱啟動、停止、暫停、繼續、重啟資料庫引擎、SQL Server Agent 或 SQL Server Browser 服務

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

  4. 重新啟動 SQL Server 或伺服器的執行個體。 如需詳細資訊,請參閱 啟動、停止、暫停、繼續、重新啟動 Database Engine、SQL Server Agent 或 SQL Server Browser 服務

  5. 執行下列查詢來確認檔案變更。

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

故障復原程序

如果由於硬體故障而必須移動檔案,請使用下列步驟,將檔案重新放置到新位置。

這很重要

如果資料庫無法啟動,也就是處於可疑模式或未復原狀態,只有系統管理員固定角色的成員才能移動檔案。

  1. 如果 SQL Server 實例已啟動,請停止實例。

  2. 在命令提示字元中輸入以下其中一個命令,以主控恢復模式啟動 SQL Server 的執行個體。

    • 針對預設的 (MSSQLSERVER) 執行個體,執行下列命令。

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

      NET START MSSQL$instancename /f /T3608  
      

    如需詳細資訊,請參閱啟動、停止、暫停、繼續、重啟資料庫引擎、SQL Server Agent 或 SQL Server Browser 服務

  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 的執行個體。

  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>');  
    

範例

下列範例會將 AdventureWorks2012 記錄檔移至新位置,作為計劃重新配置的一部分。

USE master;  
GO  
-- Return the logical file name.  
SELECT name, physical_name AS CurrentLocation, state_desc  
FROM sys.master_files  
WHERE database_id = DB_ID(N'AdventureWorks2012')  
    AND type_desc = N'LOG';  
GO  
ALTER DATABASE AdventureWorks2012 SET OFFLINE;  
GO  
-- Physically move the file to a new location.  
-- In the following statement, modify the path specified in FILENAME to  
-- the new location of the file on your server.  
ALTER DATABASE AdventureWorks2012   
    MODIFY FILE ( NAME = AdventureWorks2012_Log,   
                  FILENAME = 'C:\NewLoc\AdventureWorks2012_Log.ldf');  
GO  
ALTER DATABASE AdventureWorks2012 SET ONLINE;  
GO  
--Verify the new location.  
SELECT name, physical_name AS CurrentLocation, state_desc  
FROM sys.master_files  
WHERE database_id = DB_ID(N'AdventureWorks2012')  
    AND type_desc = N'LOG';  

另請參閱

ALTER DATABASE (Transact-SQL)
CREATE DATABASE (SQL Server Transact-SQL)
資料庫卸離與附加 (SQL Server)
移動系統資料庫
移動資料庫檔案
BACKUP (Transact-SQL)
RESTORE (Transact-SQL)
啟動、停止、暫停、繼續或重新啟動資料庫引擎、SQL Server 代理或 SQL Server 瀏覽器服務