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

SQL Server 數據/日志文件移動標準流程:OFFLINE → 文件搬遷 → MODIFY FILE → ONLINE 驗證四步法

     編輯:關於SqlServer

標準四步法 (需停機窗口)

  1. 離線數據庫
    ALTER DATABASE [MyDB] SET OFFLINE WITH ROLLBACK IMMEDIATE;
  2. 文件系統層面移動/重命名 `.mdf` / `.ldf` 到新路徑
  3. 更新元數據路徑
    ALTER DATABASE [MyDB] 
    MODIFY FILE (NAME = MyDB_Data, FILENAME = 'E:\NewPath\MyDB.mdf');
    ALTER DATABASE [MyDB] 
    MODIFY FILE (NAME = MyDB_Log, FILENAME = 'E:\NewPath\MyDB_Log.ldf');
  4. 上線並驗證
    ALTER DATABASE [MyDB] SET ONLINE;
    SELECT name, physical_name, state_desc 
    FROM sys.master_files 
    WHERE database_id = DB_ID('MyDB');

關鍵注意點

  • 邏輯名 (`NAME`) 必須與 `sys.master_files` 中 `name` 一致,非物理文件名
  • 目標路徑 SQL Server 服務帳戶需有 **完全控制** 權限
  • 移動前務必 **完整備份**,防文件損壞/遺失
  • Always On 可用性組數據庫:需先移除可用性組、移動、再加入
  • 系統數據庫 移動更複雜,需啟動參數 `-c -f -m` 單用戶模式操作

無停機替代方案 (Enterprise Edition)

  • **文件流 / FileTable** 新增文件組到新路徑,逐表 `ALTER TABLE ... REBUILD` 遷移 (在線)
  • **加入新文件組 + DBCC SHRINKFILE EMPTYFILE** 驅逐舊文件數據 (在線、耗時長)
  • **Always On 次要副本移動 → 容錯移轉 → 原主庫移動 → 容錯移轉回** (近零停機)

驗證查詢

SELECT 
    DB_NAME(database_id) AS DatabaseName,
    name AS LogicalName,
    physical_name AS PhysicalPath,
    state_desc AS State,
    size * 8.0 / 1024 AS SizeMB
FROM sys.master_files
WHERE database_id = DB_ID('MyDB');
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved