DB2 提供獨特的 Dropped Table Recovery 功能,允許在表空間層級啟用後,透過備份映像與日誌前滾,將 DROP TABLE 誤操作恢復至刪除前狀態。本文記錄一次完整的誤刪表恢復演練,含環境準備、誤操作模擬、歷史查詢、還原與 RECOVER DROPPED TABLE 參數化前滾的全過程代碼。
DB2 ALTER TABLESPACE USERSPACE2 DROPPED TABLE RECOVERY ON
僅對啟用此屬性的表空間生效。可查詢驗證:
DB2 "select TBSPACE, DROP_RECOVERY from syscat.tablespaces where owner='DB2ADMIN'"
DB2 backup db cdbiold to /databk with 2 buffers buffer 512
DB2 "delete from DC_BILL_STATUS where count_time='20080731'"
DB2 drop table DC_BILL_STATUS
DB2 "list history dropped table all for cdbiold"
輸出關鍵資訊:
D (Drop)20090317165133000000000039210b00020006 (內部 ID,RECOVER DROPPED TABLE 必須參數)USERSPACE1CREATE TABLE 語句DB2 force applications all
DB2 restore db cdbiold from /databk taken at 20090317
注意:TAKEN AT 需指定備份日期部分 (YYYYMMDD),DB2 會自動匹配當日最新備份。
DB2 "rollforward db cdbiold to end of logs and stop recover dropped table 000000000039210b00020006 to /databk"
參數解析:
TO END OF LOGS AND STOP:前滾至日誌尾並結束前滾狀態。RECOVER DROPPED TABLE <table_id>:指定要恢復的已刪除表內部 ID。TO /databk:指定表資料導出目錄 (DB2 會將恢復的表資料導出為 IXF/DEL 格式檔案至此目錄)。# 驗證表結構與資料
DB2 "select count(*) from DC_BILL_STATUS where count_time='20080731'"
# 將導出檔案導入表中 (若前滾僅恢復結構)
DB2 "import from /databk/NODE0000/data of del insert into DC_BILL_STATUS"
| 因素 | 說明 |
|---|---|
| 表空間屬性 | 必須在 DROP 前啟用 DROPPED TABLE RECOVERY ON |
| 備份時間點 | 備份必須在 DROP 操作之後 (含該 DROP 的日誌) |
| 日誌完整性 | 從備份到 DROP 之間的所有日誌必須可用 |
| 表識別碼 | 從 LIST HISTORY DROPPED TABLE 獲取,不可手動構造 |
| 導出目錄 | RECOVER DROPPED TABLE ... TO <path> 需寫入權限 |
RECOVER DROPPED TABLE 僅將表定義與資料導出至檔案,仍需 IMPORT/LOAD 入庫。此功能是 DB2 區別於其他資料庫的「後悔藥」,正確配置與演練可將誤刪表事故的 RTO 縮減至分鐘級。