466 字
2 分鐘
瀏覽次數
MSSQL RESTORE DATABASE 實戰:用 FILE + MOVE 還原成新 DB
2026-04-17

結論#

使用 RESTORE FILELISTONLY + MOVE 可把備份檔還原成另一個新資料庫名稱,避免覆蓋原 DB,也能順便重新指定 MDF / LDF 路徑。

適合用在哪裡#

  • 還原正式環境備份到測試環境
  • 複製一份資料庫做查詢分析
  • 上版前先建立測試副本
  • 原 DB 不能動,但需要資料驗證

流程步驟#

1. 先確認備份檔內容與版本#

先查看 .bak 是否可用、備份類型是否正確。若是多組備份,也能確認要還原哪一份。

RESTORE HEADERONLY
FROM DISK = N'C:\\SampleBackup\\DemoDb_backup_2026_04_17_163005.bak';

若看到 BackupType = 1 通常代表完整備份,可直接還原。

2. 查詢資料檔邏輯名稱#

還原時 MOVE 用的不是實體檔名,而是備份內的邏輯名稱,這一步必查,不然常報錯。

RESTORE FILELISTONLY
FROM DISK = N'C:\\SampleBackup\\DemoDb_backup_2026_04_17_163005.bak';
GO

你會看到類似:

LogicalNameType
DemoDbD
DemoDb_logL

之後 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;
GO

STATS = 10 代表每 10% 顯示一次進度,做人要有回報,SQL 也是。

補充#

  • FILE = 1 通常是第一組備份;若同一 bak 含多份備份,需先用 HEADERONLY 確認 Position。
  • 若 MDF / LDF 路徑不存在,還原會失敗,先建資料夾。
  • 若目標 DB 已存在,可先刪除或加 REPLACE(正式環境慎用)。

指令 / 範例整理#

Click to expand
RESTORE HEADERONLY
FROM DISK = N'C:\\SampleBackup\\DemoDb_backup_2026_04_17_163005.bak';
RESTORE FILELISTONLY
FROM 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/
作者
JoyceOwO
發佈於
2026-04-17
許可協議
CC BY-NC-SA 4.0