DB2DART(Database Analysis and Reporting Tool)是 IBM 提供的離線底層頁面分析工具,能在數據庫**未啟動**狀態下直接讀取表空間容器文件,提取尚未被覆寫的行數據。本文以 SAMPLE 數據庫為例,演示如何用 /DDEL 參數導出指定表的所有列數據,作為最後手段搶救業務數據。
DB2STOP,確保無進程持有容器文件鎖。/DDEL 不修改磁盤,但建議先對容器文件做塊級備份(dd if=/dev/rawdev of=/backup/container.img)。-- 在數據庫啟動狀態下查詢(若已掛掉,需從備份目錄表恢復 syscat.tables)
SELECT TABSCHEMA, TABNAME, TBSPACEID, TABLEID
FROM SYSCAT.TABLES
WHERE TABNAME = 'YOUR_TABLE';
假設查得:TBSPACEID=2, TABLEID=2(即 FID=2, TID=2)。
D:\> db2dart SAMPLE /DDEL
工具提示輸入參數:
Table object data formatting start.
Please enter
Table ID or name, tablespace ID, first page, num of pages:
(suffix page number with 'p' for pool relative)
2,2,0,999
2 = FID (TBSPACEID)2 = TID (TABLEID)0 = 起始頁碼(從 0 開始)999 = 頁數,**建議設大覆蓋全表**工具自動讀取表元數據,顯示將導出的 5 個列:
5 of 5 columns in the table will be dumped.
Column numbers and datatypes of the columns dumped:
0 SMALLINT
1 VARCHAR() - VARIABLE LENGTH CHARACTER STRING
2 SMALLINT
3 VARCHAR() - VARIABLE LENGTH CHARACTER STRING
4 VARCHAR() - VARIABLE LENGTH CHARACTER STRING
Default filename for output data file is TS2T2.DEL,
do you wish to change filename used? y/n
輸入 N 使用默認,或輸入 Y 指定如 recovered_table.del。
Formatted data being dumped ...
Dumping Page 0 ....
Table object data formatting end.
The requested DB2DART processing has completed successfully!
Complete DB2DART report found in:
C:\PROGRA~1\IBM\SQLLIB\DB2\DART0000\SAMPLE.RPT
| 文件 | 用途 |
|---|---|
TS2T2.DEL (或自定義 .del) | 分隔符格式數據文件,可直接 LOAD 或 IMPORT 入新表 |
SAMPLE.RPT | 詳細處理日誌,含頁面掃描統計、錯誤行記錄、校驗和不匹配詳情 |
-- 1. 建立同結構空表(含所有約束、索引暫不建)
CREATE TABLE RECOVERED_TABLE LIKE ORIGINAL_TABLE;
-- 2. 載入 DEL 文件(允許髒行跳過)
LOAD FROM TS2T2.DEL OF DEL
MODIFIED BY COLDEL0x09 CHARDEL0x22 -- 根據實際分隔符調整
INSERT INTO RECOVERED_TABLE
FOR EXCEPTION EXCEPT_TBL
NOROWWARNINGS
MESSAGES load.msg;
-- 3. 業務清洗:對比 EXCEPT_TBL、主鍵衝突、NULL 違規等
-- 4. 重建索引、RUNSTATS、授權
/DDEL 0,0,0,999999 然後按列過濾。MODIFIED BY CODEPAGE=xxx。| 方案 | 適用場景 | 優點 | 缺點 |
|---|---|---|---|
| DB2DART /DDEL | 實例掛掉、表空間受限、無備份 | 免啟動實例、底層直讀、最後手段 | 離線、可能髒數據、需人工清洗 |
| RECOVER DATABASE … TO END OF LOGS | 有完整備份+歸檔日誌 | 數據一致性最強、自動重做 | 需備份集、RTO 較長 |
| LOAD COPY YES + 表空間備份還原 | 定期做表空間備份 | 粒度細、速度快 | 需規劃備份窗口 |
| HADR 閃備庫激活 | 配置 HADR 同步 | 秒級切換、零數據丟失 | 成本高、需雙機 |
DB2DART /DDEL 是「數據庫急診室」的手術刀——不癒本病(修復元數據),但能搶回命(導出殘留行)。建議平時演練:在測試庫人為損壞表空間 → 用 DART 導出 → 對比行數/內容,熟練掌握參數輸入與後續清洗,真正故障時才能「手穩心細」。
圖示:DB2DART /DDEL 交互式導出過程截圖(來源:原文)