DB2 執行 DROP TABLE 時,只會將表標記為「已刪除」,資料頁面仍保留在表空間中,直到被覆寫。配合「歷史記錄」與「表空間層級還原 + 前滾復原」,可實現類似 Oracle Flashback Table 的精準復原。
DB2 "LIST HISTORY DROPPED TABLE ALL FOR SAMPLE"
輸出關鍵欄位:
00000000000002010002000D),後續 ROLLFORWARD RECOVER DROPPED TABLE 需用此 ID。USERSPACE1),決定還原範圍。DB2 "RESTORE DB SAMPLE TABLESPACE (USERSPACE1)
FROM C:\DB2BACKUP
TAKEN AT 20041102100931
WITHOUT ROLLING FORWARD
WITHOUT PROMPTING"
WITHOUT ROLLING FORWARD:還原後表空間處於「前滾暫掛」狀態,等待後續前滾指令。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:前滾至最新並結束前滾暫掛狀態。CREATE TABLE 陳述式),執行重建表。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),否則無法前滾。ADMIN_DROP_TABLE 預設移至「回收站」,復原更簡單(ADMIN_ROTATE_TABLE),優先考慮升級利用新特性。| 階段 | 驗證動作 |
|---|---|
| 事前 | 確認歸檔日誌啟用、近期備份可用、目標表空間無其他關鍵業務表 |
| 還原後 | LIST TABLESPACES SHOW DETAIL 確認目標表空間處於「Rollforward pending |
| 前滾後 | 檢查卸載目錄檔案大小、筆數是否符合預期 |
| 載入後 | RUNSTATS、驗證主鍵/外鍵/索引完整性、應用端冒煙測試 |
建立標準化演練流程,讓「誤刪表」從災難變為可控事件。