466 字
2 分鐘
MSSQL RESTORE DATABASE 實戰:用 FILE + MOVE 還原成新 DB
2026-04-17
結論
使用 RESTORE FILELISTONLY + MOVE 可把備份檔還原成另一個新資料庫名稱,避免覆蓋原 DB,也能順便重新指定 MDF / LDF 路徑。
適合用在哪裡
- 還原正式環境備份到測試環境
- 複製一份資料庫做查詢分析
- 上版前先建立測試副本
- 原 DB 不能動,但需要資料驗證
流程步驟
1. 先確認備份檔內容與版本
先查看 .bak 是否可用、備份類型是否正確。若是多組備份,也能確認要還原哪一份。
RESTORE HEADERONLYFROM DISK = N'C:\\SampleBackup\\DemoDb_backup_2026_04_17_163005.bak';若看到 BackupType = 1 通常代表完整備份,可直接還原。
2. 查詢資料檔邏輯名稱
還原時 MOVE 用的不是實體檔名,而是備份內的邏輯名稱,這一步必查,不然常報錯。
RESTORE FILELISTONLYFROM DISK = N'C:\\SampleBackup\\DemoDb_backup_2026_04_17_163005.bak';GO你會看到類似:
| LogicalName | Type |
|---|---|
| DemoDb | D |
| DemoDb_log | L |
之後 MOVE 就使用這兩個名稱。
3. 還原成新的資料庫名稱
建立新資料庫 DemoDb_Copy260417,並把資料檔放到新路徑,避免與原本 DB 衝突。
RESTORE DATABASE [DemoDb_Copy260417]FROM DISK = N'C:\\SampleBackup\\DemoDb_backup_2026_04_17_163005.bak'WITH FILE = 1, MOVE N'DemoDb' TO N'D:\\MSSQL\\Data\\DemoDb_Copy260417.mdf', MOVE N'DemoDb_log' TO N'D:\\MSSQL\\Log\\DemoDb_Copy260417.ldf', RECOVERY, STATS = 10;GOSTATS = 10 代表每 10% 顯示一次進度,做人要有回報,SQL 也是。
補充
FILE = 1通常是第一組備份;若同一 bak 含多份備份,需先用HEADERONLY確認 Position。- 若 MDF / LDF 路徑不存在,還原會失敗,先建資料夾。
- 若目標 DB 已存在,可先刪除或加
REPLACE(正式環境慎用)。
指令 / 範例整理
Click to expand
RESTORE HEADERONLYFROM DISK = N'C:\\SampleBackup\\DemoDb_backup_2026_04_17_163005.bak';
RESTORE FILELISTONLYFROM DISK = N'C:\\SampleBackup\\DemoDb_backup_2026_04_17_163005.bak';GO
RESTORE DATABASE [DemoDb_Copy260417]FROM DISK = N'C:\\SampleBackup\\DemoDb_backup_2026_04_17_163005.bak'WITH FILE = 1, MOVE N'DemoDb' TO N'D:\\MSSQL\\Data\\DemoDb_Copy260417.mdf', MOVE N'DemoDb_log' TO N'D:\\MSSQL\\Log\\DemoDb_Copy260417.ldf', RECOVERY, STATS = 10;GO收尾
還原資料庫不難,難的是搞錯邏輯檔名與路徑。先查清楚再下手,能少踩很多雷。
MSSQL RESTORE DATABASE 實戰:用 FILE + MOVE 還原成新 DB
https://joyceowo.github.io/posts/345a78ea09fa808a8d27cf9bb32b8b92/