資料庫由兩類檔案組成:資料檔(.mdf 主檔、.ndf 次檔)與交易記錄檔(.ldf)。搬家本質是將這兩類檔案移至新路徑,並更新系統目錄中的路徑資訊。
.mdf、.ldf 從舊路徑(如 D:\MSSQL\Data)複製/移動到新路徑(如 E:\SQLDataNew)。.mdf → 確定。
-- 1. 分離
USE master;
GO
EXEC sp_detach_db 'MyDB';
GO
-- 2. 移動檔案(OS 層面 copy/move)
-- 3. 附加
USE master;
GO
EXEC sp_attach_db
@dbname = 'MyDB',
@filename1 = 'E:\SQLDataNew\MyDB_data.mdf',
@filename2 = 'E:\SQLDataNew\MyDB_log.ldf';
GO
-d(資料檔路徑)與 -l(記錄檔路徑)為新路徑,例如:
-dE:\SQLDataNew\master.mdf
-lE:\SQLDataNew\mastlog.ldf
net stop MSSQLSERVER)。master.mdf、mastlog.ldf 移至新路徑。net start MSSQLSERVER)。救急技巧:若啟動參數填錯導致無法啟動,可修改登錄機碼:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\ 下的 SQLArg1(-d)、SQLArg2(-l)。
-T3608(僅復原 master,跳過其他資料庫啟動)。EXEC sp_detach_db 'msdb';(model 同理)。EXEC sp_attach_db 'msdb', 'E:\New\msdbdata.mdf', 'E:\New\msdblog.ldf';-T3608,重啟服務。
USE master;
GO
ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLDataNew\tempdb.mdf');
GO
ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'E:\SQLDataNew\templog.ldf');
GO
-- 重啟 SQL Server 服務生效
tempdb 每次啟動重建,無需分離/附加,MODIFY FILE 後重啟即可。
-- 1. 離線資料庫
ALTER DATABASE MyDB SET OFFLINE WITH ROLLBACK IMMEDIATE;
GO
-- 2. 修改路徑
ALTER DATABASE MyDB MODIFY FILE (NAME = MyDB_data, FILENAME = 'E:\SQLDataNew\MyDB_data.mdf');
ALTER DATABASE MyDB MODIFY FILE (NAME = MyDB_log, FILENAME = 'E:\SQLDataNew\MyDB_log.ldf');
GO
-- 3. 移動實體檔案(OS 層面)
-- 4. 上線資料庫
ALTER DATABASE MyDB SET ONLINE;
GO
優點:不需分離/附加,保留資料庫屬性、權限、Trustedworthy 設定等。缺點:需短暫離線。
| 項目 | 確認 |
|---|---|
| 新磁碟空間充足 | 預留 1.5x 以上空間 |
| SQL Server 服務帳號對新路徑有讀寫權限 | NTFS 權限:服務帳號 Full Control |
| 資料庫離線/分離前已備份 | 萬一搬家失敗可還原 |
| 搬家後驗證 | DBCC CHECKDB、查詢測試、檢查 sys.master_files 路徑 |
| 更新維護計畫/備份腳本中的路徑 | 避免備份寫回舊路徑 |
ALTER DATABASE MODIFY FILE + 離線/移動/上線,保留中繼資料。-T3608 追蹤旗標協助。MODIFY FILE + 重啟。