首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 數據/日志文件 (.mdf/.ldf) 移動目錄完整操作指南:離線 + 修改元數據 + 物理遷移

     編輯:關於SqlServer

適用場景

  • 系統盤空間不足,需將數據文件遷移至專用數據盤(如 D:/SQLData/)。
  • 多實例部署,隔離 I/O。
  • 還原備份時指定新路徑(WITH MOVE)同理。

標準三步走流程

  1. 設置數據庫離線(斷開所有連接,獲得文件獨佔權):
    ALTER DATABASE [TestDB] SET OFFLINE WITH ROLLBACK IMMEDIATE;
  2. 修改系統元數據路徑(邏輯移動,不動物理文件):
    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');

  3. 物理移動文件:
    資源管理器 / 命令行將原目錄下的 .mdf、.ldf 剪切到新路徑(需完全匹配步驟 2 指定的路徑與文件名)。
  4. 上線數據庫:
    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 移動需修改註冊表啟動參數,官方文檔專門章節,此處不展開。

最佳實踐清單

  1. 遷移前:DBCC CHECKDB、完整備份、記錄原始路徑/邏輯名/大小。
  2. 目標盤:預先格式化 64KB 分配單元、啟用瞬間文件初始化(服務賬號加入 Perform volume maintenance tasks)、預留 2 倍空間。
  3. 操作腳本化、版本控制、雙人複核。
  4. 遷移後:sp_updatestats、檢查 sys.dm_io_virtual_file_stats I/O 延遲、監控空間增長。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved