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

SQL Server 備份檔案還原至現有資料庫:跨庫資料合併操作指南

     編輯:關於SqlServer

適用情境

現有生產資料庫 DOE 運行正常,需從異源備份檔 A1.BAK (非 DOE 備份) 導入特定資料表與資料,**保留 DOE 原有資料不變**。適用於 SQL Server 2000/2005/2008/2012+ (介面略異,邏輯一致)。

兩階段操作流程

階段一:將備份還原至暫存資料庫

  1. Enterprise Manager / SSMS → 右鍵「資料庫」 → 「新增資料庫」 → 名稱 A1_Temp。
  2. 右鍵 A1_Temp → 「所有工作」 → 「還原資料庫」。
  3. 「一般」頁籤:
    • 來源:「從裝置」 → 「選取裝置」 → 「新增」 → 選擇 A1.BAK。
  4. 「選項」頁籤 (關鍵):
    • ☑ 強制在現有資料庫上還原 (WITH REPLACE)。
    • 修改還原檔案路徑,避免衝突:
      • 資料檔:C:\A1_Temp.mdf
      • 記錄檔:C:\A1_Temp.ldf
  5. 確定執行還原,A1_Temp 現在包含來源備份的完整結構與資料。

階段二:DTS/SSIS 將資料從暫存庫遷入目標庫

  1. 右鍵目標資料庫 DOE → 「所有工作」 → 「匯入資料」啟動 DTS/SSIS 精靈。
  2. 資料來源:選擇 Microsoft OLE DB Provider for SQL Server,伺服器填本機,資料庫選 A1_Temp。
  3. 目的地:預設為 DOE (當前資料庫)。
  4. 「指定資料表複製或查詢」:選「從來源資料庫複製資料表與檢視表」。
  5. 勾選需導入的資料表 (可全選),對應關係檢查:來源表 → 目標表 (同名或指定新表名)。
  6. 可選:「編輯對應」調整欄位對應、身分識別插入、截斷選項。
  7. 完成精靈,執行封裝。

進階選項與注意事項

場景處理方式
目標表已存在同名資料,需合併 (Upsert)精靈選「寫入查詢」而非複製表,使用 MERGE (2008+) 或 INSERT...WHERE NOT EXISTS / UPDATE...FROM 邏輯。
大量資料 (百萬列+)使用 BULK INSERT / bcp / SSIS 「快速載入」模式 (Table Lock, Check Constraints Off, Batch Size 10000)。
結構不完全相容 (欄位差異)來源查詢中明確列出欄位並轉換型別,或建立預存檢視表 (View) 作為來源。
需保留來源備份檔以供審計還原後勿刪除 A1_Temp,改為設為 READ_ONLY 或移至歸檔伺服器。
跨版本還原 (如 2000 → 2008)直接還原備份檔即可自動升級,但 2000 備份無法在 2012+ 直接還原,需中轉 2008R2。

T-SQL 腳本化範例 (自動化部署)

-- 1. 建立暫存資料庫並還原
USE master;
GO
CREATE DATABASE A1_Temp
ON (NAME = 'A1_Temp_Data', FILENAME = 'C:\Data\A1_Temp.mdf')
LOG ON (NAME = 'A1_Temp_Log', FILENAME = 'C:\Data\A1_Temp.ldf');
GO

RESTORE DATABASE A1_Temp
FROM DISK = 'C:\Backups\A1.BAK'
WITH REPLACE,
MOVE 'A1_Data' TO 'C:\Data\A1_Temp.mdf',
MOVE 'A1_Log'  TO 'C:\Data\A1_Temp.ldf',
STATS = 10;
GO

-- 2. 導入特定資料表 (範例:Customers, Orders)
-- 假設結構相同,開啟 IDENTITY_INSERT
SET IDENTITY_INSERT DOE.dbo.Customers ON;
INSERT INTO DOE.dbo.Customers (CustomerID, CompanyName, ContactName, ...)
SELECT CustomerID, CompanyName, ContactName, ...
FROM A1_Temp.dbo.Customers
WHERE NOT EXISTS (SELECT 1 FROM DOE.dbo.Customers c WHERE c.CustomerID = A1_Temp.dbo.Customers.CustomerID);
SET IDENTITY_INSERT DOE.dbo.Customers OFF;
GO

-- 3. 清理 (視保留策略決定)
-- DROP DATABASE A1_Temp;

驗證清單

  • ✅ 目標資料庫 DOE 原有資料列數未減少。
  • ✅ 新導入資料表列數符合預期 (來源表列數 - 重複鍵衝突數)。
  • ✅ 關鍵業務查詢 (報表、應用功能) 運行正常。
  • ✅ 執行 DBCC CHECKDB(DOE) 無一致性錯誤。

結語

「還原至暫存庫 → DTS/SSIS 遷入目標庫」是跨庫資料合併的標準化、低風險模式。關鍵在於 WITH REPLACE + 檔案重定位 避免衝突,以及 DTS/SSIS 靈活的欄位對應與轉換能力。生產環境操作前,務必於測試環境完整演練並驗證資料完整性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved