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

DB2 Drop Table 急救指南:利用歷史記錄與 Rollforward 精準復原

     編輯:DB2 教學

核心原理:DROP TABLE 並非立即銷毀資料

DB2 執行 DROP TABLE 時,只會將表標記為「已刪除」,資料頁面仍保留在表空間中,直到被覆寫。配合「歷史記錄」與「表空間層級還原 + 前滾復原」,可實現類似 Oracle Flashback Table 的精準復原。

四步驟復原流程

步驟 1:查詢歷史記錄定位目標表

DB2 "LIST HISTORY DROPPED TABLE ALL FOR SAMPLE"

輸出關鍵欄位:

  • Timestamp:刪除時間點,用於選擇備份映像。
  • Table ID:內部識別碼(如 00000000000002010002000D),後續 ROLLFORWARD RECOVER DROPPED TABLE 需用此 ID。
  • Tablespace:所在表空間(如 USERSPACE1),決定還原範圍。

步驟 2:表空間層級還原(不前滾)

DB2 "RESTORE DB SAMPLE TABLESPACE (USERSPACE1)
     FROM C:\DB2BACKUP
     TAKEN AT 20041102100931
     WITHOUT ROLLING FORWARD
     WITHOUT PROMPTING"
  • WITHOUT ROLLING FORWARD:還原後表空間處於「前滾暫掛」狀態,等待後續前滾指令。
  • 備份時間點必須早於 DROP 動作。

步驟 3:前滾至日誌末端並卸載被刪表資料

DB2 "ROLLFORWARD DB SAMPLE TO END OF LOGS
     AND COMPLETE
     RECOVER DROPPED TABLE 00000000000002010002000D
     TO C:\DB2BACKUP"
  • RECOVER DROPPED TABLE <Table ID>:核心指令,從日誌重放 DROP 前的 INSERT/UPDATE/DELETE,將資料卸載至指定目錄(此處 C:\DB2BACKUP),產生 DEL 格式檔案。
  • TO END OF LOGS AND COMPLETE:前滾至最新並結束前滾暫掛狀態。

步驟 4:重建表結構並載入資料

  1. 從歷史記錄取得該表的原始 DDL(CREATE TABLE 陳述式),執行重建表。
  2. 使用 LOAD 快速載入卸載檔:
    DB2 "LOAD FROM C:\DB2BACKUP\NODE0000\DATA OF DEL METHOD P(1,2) INSERT INTO RECOVERME"
    METHOD P(1,2):指定只載入第 1、2 欄位(對應目標表結構)。

關鍵前提與限制

  • 資料庫必須啟用歸檔日誌模式(LOGARCHMETH1 非 OFF),否則無法前滾。
  • 備份必須包含目標表空間,且早於 DROP 時間點。
  • 表空間還原會影響同表空間內所有其他表(回滾至備份時間點),生產環境極謹慎,建議先在測試環境演練。
  • 大表卸載/載入耗時長,需評估 RTO/RPO。
  • DB2 9.7+ 支援 ADMIN_DROP_TABLE 預設移至「回收站」,復原更簡單(ADMIN_ROTATE_TABLE),優先考慮升級利用新特性。

操作檢查清單

階段驗證動作
事前確認歸檔日誌啟用、近期備份可用、目標表空間無其他關鍵業務表
還原後LIST TABLESPACES SHOW DETAIL 確認目標表空間處於「Rollforward pending
前滾後檢查卸載目錄檔案大小、筆數是否符合預期
載入後RUNSTATS、驗證主鍵/外鍵/索引完整性、應用端冒煙測試

建立標準化演練流程,讓「誤刪表」從災難變為可控事件。

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