移動使用者資料庫
在 SQL Server 中,您可以在 ALTER DATABASE 陳述式的 FILENAME 子句中指定新的檔案位置,以便將使用者資料庫的資料、記錄和全文檢索目錄檔案移到新位置。這種方法適用於在相同的 SQL Server 執行個體內移動資料庫檔案。若要將資料庫移到 SQL Server 的另一個執行個體或移到其他伺服器,請使用備份和還原或卸離和附加作業。
[!附註]
SQL Server Database Engine 的某些功能會變更 Database Engine 將資訊儲存在資料庫檔案中的方式,這些功能受限為特定版本的 SQL Server。包含這些功能的資料庫無法移至不支援它們的 SQL Server 版本。您可以使用 sys.dm_db_persisted_sku_features 動態管理檢視來列出目前資料庫中啟用的所有版本特有功能。
本主題中的程序需要資料庫檔案的邏輯名稱。若要取得該名稱,請查詢 sys.master_files 目錄檢視中的 name 資料行。
[!附註]
將資料庫移動到其他伺服器執行個體,以提供一致的經驗給使用者和應用程式時,您可能必須為資料庫重新建立部分或全部的中繼資料。如需詳細資訊,請參閱<在另一個伺服器執行個體上提供可用的資料庫時,管理中繼資料>。
計畫的重新放置程序
若要依照計畫的重新放置來移動資料或記錄檔,請遵循下列步驟:
執行下列陳述式。
ALTER DATABASE database_name SET OFFLINE;
將一個或多個檔案移到新位置。
對於移動的每個檔案,執行下列陳述式。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' );
執行下列陳述式。
ALTER DATABASE database_name SET ONLINE;
執行下列查詢以驗證檔案變更。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
排程的磁碟維謢重新放置
若要在排程的磁碟維護程序中重新放置檔案,請遵循下列步驟:
對於要移動的每個檔案執行下列陳述式。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' );
停止 SQL Server 的執行個體或關閉系統以執行維護。如需詳細資訊,請參閱<停止服務>。
將一個或多個檔案移到新位置。
重新啟動 SQL Server 的執行個體或伺服器。如需詳細資訊,請參閱<啟動和重新啟動服務>。
執行下列查詢以驗證檔案變更。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
失敗復原程序
如果因為硬體失敗必須移動檔案,請遵循下列步驟將檔案重新放置到新位置。
重要事項 |
---|
如果無法啟動資料庫,也就是資料庫在質疑模式下或在無法復原的狀態下,只有系統管理員 (sysadmin) 固定角色的成員可以移動檔案。 |
如果 SQL Server 的執行個體已經啟動,請將它停止。
在命令提示字元下輸入下列其中一個命令,以僅限 master 的復原模式啟動 SQL Server 的執行個體。
如果是預設 (MSSQLSERVER) 執行個體,請執行下列命令。
NET START MSSQLSERVER /f /T3608
如果是具名執行個體,請執行下列命令。
NET START MSSQL$instancename /f /T3608
如需詳細資訊,請參閱<如何:啟動 SQL Server 的執行個體 (net 命令)>。
針對要移動的每個檔案,使用 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 的執行個體。
將一個或多個檔案移到新位置。
啟動 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>');
範例
下列範例會以計畫的重新放置,將 AdventureWorks2008R2 記錄檔移到新位置。
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'AdventureWorks2008R2')
AND type_desc = N'LOG';
GO
ALTER DATABASE AdventureWorks2008R2 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 AdventureWorks2008R2
MODIFY FILE ( NAME = AdventureWorks2008R2_Log,
FILENAME = 'C:\NewLoc\AdventureWorks2008R2_Log.ldf');
GO
ALTER DATABASE AdventureWorks2008R2 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'AdventureWorks2008R2')
AND type_desc = N'LOG';