首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

從 SQL Server 備份檔 (.bak) 還原資料至現有資料庫實操指南

     編輯:MySQL 資料庫相關知識

需求:現有資料庫 DOE 已含大量資料,需從另一個備份檔 A1.bak (非 DOE 備份) 匯入特定資料表與資料,**且不覆蓋 DOE 原有資料**。直接還原會覆蓋整個資料庫,因此需採用「還原至臨時資料庫 → 匯入目標資料庫」二階段策略。

操作步驟 (SQL Server 2000 企業管理員 / SSMS 通用)

階段一:將 .bak 還原為臨時資料庫

  1. 企業管理員 → 右鍵「資料庫」 → 「新增資料庫」 → 名稱 A1_Temp。
  2. 右鍵 A1_Temp → 「所有工作」 → 「還原資料庫」。
  3. 選擇「從裝置」 → 「選取裝置」 → 「新增」 → 選擇 A1.bak → 確定。
  4. 切換至「選項」頁籤:
    • 勾選 「在現有資料庫上強制還原」。
    • 修改「移動至實體檔案名稱」:
      C:\A1_Temp_Data.mdf (資料檔)
      C:\A1_Temp_Log.ldf (記錄檔)
  5. 確定執行還原,完成後 A1_Temp 即包含備份檔完整結構與資料。

階段二:使用 DTS/匯入精靈將資料導入 DOE

  1. 右鍵 DOE 資料庫 → 「所有工作」 → 「匯入資料」啟動 DTS 精靈。
  2. 資料來源:選擇 Microsoft OLE DB Provider for SQL Server,伺服器填本機,資料庫選 A1_Temp。
  3. 目的地:預設為 DOE (目前資料庫)。
  4. 選擇「從來源資料表複製資料」 → 勾選需匯入的資料表 (可全選或指定)。
  5. 若目標資料表已存在,可選「附加資料」或「覆寫」 (視需求);建議先在 DOE 建立同名空表結構再附加。
  6. 連續「下一步」至完成,執行封裝。

收尾

驗證 DOE 新增資料表與筆數正確後,右鍵刪除臨時資料庫 A1_Temp 釋放空間。

進階自動化腳本 (T-SQL + xp_cmdshell / PowerShell)

-- 1. 還原備份至臨時資料庫
RESTORE DATABASE A1_Temp
FROM DISK = 'C:\Backups\A1.bak'
WITH MOVE 'A1_Data' TO 'C:\Data\A1_Temp.mdf',
     MOVE 'A1_Log'  TO 'C:\Data\A1_Temp.ldf',
     REPLACE, STATS=10;

-- 2. 動態產生 INSERT INTO ... SELECT * FROM OPENROWSET 腳本匯入指定表
-- (略,建議用 SSIS 套件或 sqlcmd + bcp 處理大量資料)

-- 3. 清理
DROP DATABASE A1_Temp;

關鍵注意事項

  • 版本相容:備份檔版本不能高於目標執行個體版本 (如 SQL 2014 備份無法還原至 2012)。
  • 檔案路徑:WITH MOVE 必須指定目標實例可存取的磁碟路徑,避免預設路徑衝突。
  • 大量資料:超過百萬筆建議使用 bcp、BULK INSERT 或 SSIS,效能遠優於 DTS 精靈。
  • 身分認同:若備份含使用者/權限,還原後需執行 sp_change_users_login 'Auto_Fix', 'user' 修復孤立使用者。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved