-- 停止服務後,命令提示字元執行:
-- 預設實例
NET START MSSQLSERVER /f /T3608
-- 命名實例
NET START MSSQL$InstanceName /f /T3608
參數說明:/f = 最小配置啟動;/T3608 = 略過除 master 以外所有資料庫的啟動/恢復。
-- 使用 sqlcmd 或 SSMS 連線執行
ALTER DATABASE YourDatabase
MODIFY FILE (NAME = LogicalName_Data, FILENAME = 'NewPath\Data.mdf');
ALTER DATABASE YourDatabase
MODIFY FILE (NAME = LogicalName_Log, FILENAME = 'NewPath\Log.ldf');
執行成功會顯示:「檔案 'LogicalName' 已在系統目錄中修改。新路徑將在下次啟動資料庫時生效。」
NET STOP MSSQLSERVER)ROBOCOPY 將 .mdf/.ldf 移動至新路徑NET START MSSQLSERVER)SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'YourDatabase');
確認 physical_name 已指向新路徑,state_desc 為 ONLINE。
| 問題 | 原因 | 對策 |
|---|---|---|
| ALTER DATABASE 執行無誤但啟動失敗 | 實體檔案未移動或路徑拼錯 | 嚴格核對邏輯檔名、實體路徑、權限 (SQL Server 服務帳號需具 NTFS 讀寫權限) |
| 資料庫仍標示 RECOVERY_PENDING | 記錄檔遺失或版本不匹配 | 若有完整備份,改用 RESTORE WITH MOVE;若無備份則需嘗試重建記錄檔 (風險高) |
| 命名實例服務名稱錯誤 | 服務名稱非 MSSQL$InstanceName | 用 services.msc 或 SC QUERY 確認確切服務名稱 |