在 DB2 數據庫管理空間 (DMS) 表空間中,高水位線 (High Water Mark, HWM) 標識該表空間「曾經使用過的最大頁號」。即使後續大量刪除數據釋放了空間,HWM 也不會自動下降。這導致:
BACKUP DATABASE 仍需讀取 HWM 以下所有頁面,備份文件膨脹、耗時增加。RESTORE 目標容器必須至少等於 HWM 大小,限制縮容遷移靈活性。執行 db2 list tablespaces show detail,對比 High water mark (pages) 與 Used pages。若 Used pages << HWM,且表空間為 DMS 類型,則有降低價值。
前置條件: 實例必須停止 (db2stop force),僅離線模式運行。
DB2DART 提供三大針對 HWM 的選項,組合使用效果最佳:
db2dart <數據庫名> /DHWM /TSI <表空間ID>
DART0000.RPT (默認在實例目錄下)。db2dart <數據庫名> /LHWM /TSI <表空間ID> /HWM <目標頁數>
/HWM 0 表示「嘗試降到理論最低值」。db2dart <數據庫名> /RHWM /TSI <表空間ID>
/RHWM 專門掃描並釋放這些「孤兒映射頁」,直接降低 HWM,無需移動用戶數據,速度極快、風險極低。db2 backup database <db> online (必做)。db2stop force。db2dart DB /DHWM /TSI 3 → 閱讀報告鎖定目標表 (假設為 SALES.FACT_ORDER)。db2dart DB /LHWM /TSI 3 /HWM 0 → 確認建議為 REORG 該表。db2dart DB /RHWM /TSI 3 → 再次 /DHWM 驗證 HWM 是否下降。db2startdb2 reorg table SALES.FACT_ORDER allow read access (或 allow no access 視業務窗口)。db2 runstats on table SALES.FACT_ORDER with distribution and detailed indexes alldb2 list tablespaces show detail 確認 HWM 下降、Used pages 變化合理。db2 backup database <db> online (新備份體積應明顯縮小)。若業務極其敏感不可停機,可採用 導出-重建-導入 法:
db2move <db> export -tn SALES.FACT_ORDER
db2 "drop table SALES.FACT_ORDER"
db2 "create table SALES.FACT_ORDER ..."
db2move <db> import -tn SALES.FACT_ORDER
db2 reorg table SALES.FACT_ORDER
db2 runstats on table SALES.FACT_ORDER ...
缺點: 需應用停寫、外鍵/權限/觸發器需重建、大表耗時極長。

降低 HWM 是 DMS 表空間容量回收的關鍵運維動作。優先用 /RHWM 清理映射頁 (無損、快、無需停庫後再啟動),再視情況 REORG 持有 HWM 的大表。務必在維護窗口、全備份後、停庫狀態下操作,並保留操作日誌與驗證截圖。