移動使用者資料庫

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

考量

將資料庫移動到其他伺服器執行個體,以提供一致的經驗給使用者和應用程式時,您可能必須為資料庫重新建立部分或全部的中繼資料。 如需詳細資訊,請參閱在另一個伺服器執行個體上提供可用的資料庫時管理中繼資料 (SQL Server)

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

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

從 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 服务

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

失敗復原程序

如果因為硬體失敗必須移動檔案,請遵循下列步驟將檔案重新放置到新位置。

重要

如果無法啟動資料庫,也就是資料庫在質疑模式下或在無法復原的狀態下,只有 sysadmin 固定角色的成員可以移動檔案。

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

  2. 在命令提示字元中輸入下列其中一個命令,以在僅限主要復原模式中啟動SQL Server實例。

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

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

      NET START MSSQL$instancename /f /T3608  
      

    如需詳細資訊,請參閱 启动、停止、暂停、继续、重启 SQL Server 服务

  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)
啟動、停止、暫停、繼續、重新啟動 Database Engine、SQL Server Agent 或 SQL Server Browser 服務