跨伺服器還原 SQL Server 2005 備份時,即使來源/目標資料庫名稱相同,仍報錯:錯誤 3154:備份集中的資料庫備份與現有的 'XXXXXX' 資料庫不同。原因:SQL Server 2005 引入資料庫識別碼 (database_guid) 與備份集識別碼 (backup_set_guid) 嚴格比對,防止誤覆蓋不同來源資料庫。解決:還原選項中勾選 「完全覆蓋現有資料庫」(WITH REPLACE)。
訊息 3154,層級 16,狀態 4 備份集中的資料庫備份與現有的 'XXXXXX' 資料庫不同。 訊息 3013,層級 16,狀態 1 RESTORE DATABASE 異常結束。
database_guid (sys.databases) 與備份集中記錄的 database_guid,**不符則拒絕還原**,除非明確指定 WITH REPLACE。
RESTORE DATABASE [TargetDB]
FROM DISK = 'D:\Backup\SourceDB_20240115.bak'
WITH REPLACE, -- 強制覆蓋,忽略 GUID 比對
STATS = 10, -- 顯示進度
MOVE 'SourceDB_Data' TO 'D:\Data\TargetDB.mdf', -- 如路徑不同需 RELOCATE
MOVE 'SourceDB_Log' TO 'D:\Log\TargetDB_Log.ldf';
BACKUP DATABASE SourceDB TO DISK = '...' WITH COMPRESSION, CHECKSUM, COPY_ONLY; (COPY_ONLY 不破壞差異基底)。RESTORE FILELISTONLY FROM DISK = '...' 確認邏輯檔名/路徑。RESTORE DATABASE ... WITH REPLACE, NORECOVERY; (後續套用日誌備份) 或 WITH REPLACE, RECOVERY; (一次完成)。DBCC CHECKDB、更新統計資訊、修正孤立使用者 (sp_change_users_login / ALTER USER ... WITH LOGIN)、重建索引/統計。| 誤區 | 正確認知 |
|---|---|
| 「改名就能還原」 | 新資料庫名無 GUID 衝突可直接還原,但業務連線字串需同步修改,成本高。 |
| 「REPLACE 會遺失資料」 | REPLACE 僅忽略 GUID 比對,**不影響備份集內容**,正常還原備份資料。 |
| 「SQL 2000 習慣直覺適用」 | 2005+ 安全機制嚴格化,**必須显式指定 REPLACE**,養成習慣。 |