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

解決 SQL Server 2005 還原資料庫「備份集中的資料庫備份與現有的資料庫不同」錯誤

     編輯:SQL Server 2005

SQL Server 2005 還原資料庫時,若目標資料庫已存在且與備份檔來源不同 (不同資料庫名稱、不同檔案佈局、不同 LSN 鏈),會報錯:
備份集中的資料庫備份與現有的資料庫不同。本文說明原因與兩種解決方案:覆蓋現有資料庫 (GUI) 與 WITH REPLACE/移動檔案 (T-SQL)。

錯誤原因

  • 備份檔來源資料庫名稱 ≠ 目標資料庫名稱
  • 備份檔內部資料庫 ID (dbid) ≠ 目標資料庫 ID
  • 檔案邏輯名稱/數量/路徑不符
  • LSN 鏈不連續 (如嘗試還原差異/記錄備份但基底不同)

方案一:SSMS 圖形介面 - 勾選「覆蓋現有資料庫」

  1. 右鍵「資料庫」→ 工作** → 還原** → 資料庫**
  2. 來源選擇「從裝置」,點選「...」新增備份檔
  3. 關鍵步驟:若備份檔無 .bak 副檔名,下拉「所有檔案」選擇
  4. 切換至 選項** 頁籤
  5. 勾選「覆蓋現有的資料庫 (WITH REPLACE)」**
  6. 若檔案路徑不同,同頁勾選「將資料庫檔案移動到」指定新路徑
  7. 確定執行

方案二:T-SQL 腳本 (自動化/遷移腳本適用)

基本覆蓋還原

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 才能線上
  • 跨版本還原 (2005 → 2012+) 自動升級,不可逆,測試環境先驗證
  • 加密備份 (SQL 2014+) 還原需提供憑證/金鑰

驗證還原結果

-- 檢查資料庫狀態
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;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved