WITH MOVE)同理。ALTER DATABASE [TestDB] SET OFFLINE WITH ROLLBACK IMMEDIATE;
USE master;
ALTER DATABASE [TestDB] MODIFY FILE (NAME = N'TestDB', FILENAME = N'D:\SQLData\TestDB.mdf');
ALTER DATABASE [TestDB] MODIFY FILE (NAME = N'TestDB_log', FILENAME = N'D:\SQLData\TestDB_log.ldf');
關鍵:NAME 是 邏輯文件名(sys.database_files 中 name 列),不是物理文件名。可通過屬性頁或查詢獲取:
SELECT name, physical_name FROM sys.database_files WHERE database_id = DB_ID('TestDB');
.mdf、.ldf 剪切到新路徑(需完全匹配步驟 2 指定的路徑與文件名)。ALTER DATABASE [TestDB] SET ONLINE;
驗證:SELECT name, physical_name FROM sys.database_files; 路徑已更新。| 錯誤現象 | 原因 | 解決 |
|---|---|---|
| 上線失敗:文件不存在/路徑錯誤 | 邏輯名/物理路徑/文件名任一不匹配 | 核對 sys.database_files、實際文件、ALTER DATABASE 語句三者一致 |
| 離線卡住/超時 | 長事務回滾、活動連接多 | 維護窗口操作、先 KILL 阻塞會話、或 SET OFFLINE WITH NO_WAIT (2012+) |
| 權限拒絕移動文件 | SQL Server 服務賬號無目標目錄權限 | 授予服務賬號目標目錄完全控制權限 |
| 鎖定無法剪切 | 數據庫未真正離線/防毒軟件掃描 | 確認 OFFLINE 狀態、暫停防毒、Resource Monitor 查找句柄 |
model、msdb、tempdb 移動需啟動參數 -c -m -T3608 單用戶模式,修改 master 中路徑後移動文件,風險極高,非必要不動。
master 移動需修改註冊表啟動參數,官方文檔專門章節,此處不展開。
DBCC CHECKDB、完整備份、記錄原始路徑/邏輯名/大小。Perform volume maintenance tasks)、預留 2 倍空間。sp_updatestats、檢查 sys.dm_io_virtual_file_stats I/O 延遲、監控空間增長。