SQL Server 2005 還原資料庫時,若目標資料庫已存在且與備份檔來源不同 (不同資料庫名稱、不同檔案佈局、不同 LSN 鏈),會報錯:備份集中的資料庫備份與現有的資料庫不同。本文說明原因與兩種解決方案:覆蓋現有資料庫 (GUI) 與 WITH REPLACE/移動檔案 (T-SQL)。
.bak 副檔名,下拉「所有檔案」選擇
RESTORE DATABASE TargetDB
FROM DISK = 'F:\Backup\SourceDB.bak'
WITH REPLACE, -- 強制覆蓋
STATS = 10;
RESTORE DATABASE TargetDB
FROM DISK = 'F:\Backup\SourceDB.bak'
WITH REPLACE,
MOVE 'SourceDB_Data' TO 'D:\SQLData\TargetDB.mdf', -- 邏輯檔名 → 新路徑
MOVE 'SourceDB_Log' TO 'L:\SQLLog\TargetDB_Log.ldf',
STATS = 10;
邏輯檔名可用 RESTORE FILELISTONLY FROM DISK = '...' 查詢。
RESTORE DATABASE NewDB_Name
FROM DISK = 'F:\Backup\OldDB.bak'
WITH
MOVE 'OldDB_Data' TO 'D:\SQLData\NewDB_Name.mdf',
MOVE 'OldDB_Log' TO 'L:\SQLLog\NewDB_Name_Log.ldf',
STATS = 10;
-- 不需 REPLACE,因目標資料庫不存在
| 情境 | 是否需 REPLACE | 是否需 MOVE | 備註 |
|---|---|---|---|
| 同名資料庫、同路徑、同檔案佈局 | 是 | 否 | 一般覆蓋還原 |
| 同名資料庫、不同路徑/磁碟 | 是 | 是 | 遷移儲存體 |
| 不同名資料庫 (建立新庫) | 否 | 是 | 測試/開發環境複製 |
| 不同來源資料庫還原至現有目標庫 | 是 | 視路徑而定 | 跨環境同步 |
WITH REPLACE 會銷毀目標資料庫現有所有資料,執行前確認已備份或可接受遺失RESTORING 狀態,需後續 RESTORE LOG 或 RESTORE DATABASE ... WITH RECOVERY 才能線上-- 檢查資料庫狀態
SELECT name, state_desc FROM sys.databases WHERE name = 'TargetDB';
-- 檢查檔案路徑
SELECT name, physical_name FROM sys.master_files WHERE database_id = DB_ID('TargetDB');
-- 檢查關鍵資料筆數
SELECT COUNT(*) FROM TargetDB.dbo.KeyTable;