本文流程經驗證於:IBM x346、雙 3.2GHz、4GB RAM、RAID 1、DB2 V8.2.4、Windows 2000 Adv Server、DMS 表空間。測試環境下 LOAD/Import 速度達 60~100 萬筆/分,適合中型資料庫整庫遷移、表空間重組、跨版本升級等場景。
GATHER)、分區鍵、壓縮選項等create database targetdb ... → 建立 DMS 表空間 GATHEREXPORT 指令IMPORT 或 LOAD 指令核心邏輯:查詢 SYSIBM.SYSTABLES 取得指定 Schema 下所有表名,迴圈拼裝命令。
public void createExportFile(Connection conn, String creator, String filePath) throws Exception {
DBBase dbBase = new DBBase(conn);
String sql = "select name from sysibm.systables where creator = '" + creator + "' and type='T'";
dbBase.executeQuery(sql);
DBResult result = dbBase.getSelectDBResult();
List<String> tables = new ArrayList<>();
while (result.next()) {
tables.add(result.getString(1));
}
dbBase.close();
StringBuilder sb = new StringBuilder();
String nl = System.lineSeparator();
for (int i = 0; i < tables.size(); i++) {
String t = tables.get(i);
// IXF 格式保留型別資訊,適合跨平台遷移
sb.append("db2 \"export to aa").append(i+1).append(".ixf of ixf select * from ").append(t).append("\"");
sb.append(nl);
}
FileUtility.saveStringToFile(filePath, sb.toString(), false);
}
// 同理迴圈產生
sb.append("db2 \"import from aa").append(i+1).append(".ixf of ixf insert into ").append(t).append("\"");
sb.append(nl);
生產建議:
LOAD 並啟用 NONRECOVERABLE 避免日誌暴增SCHEMA_TABLE.ixf)便於對帳RUNSTATS 確保統計資訊最新,Import 後同步執行 RUNSTATS 與 REORGCHKdb2batch 或 db2 -tvf 批次執行腳本,並記錄輸出日誌供審計| 需求 | 推薦做法 |
|---|---|
| 極大表(TB 級) | db2move + 並行 Export/Load、或 ADMIN_MOVE_TABLE 線上移動 |
| 跨版本/跨平台 | IXF 格式 + db2look -m 產生相容 DDL |
| 極短停機窗口 | HADR 同步切換、或 Q 复制/CDC 增量同步 |
| 僅遷移部分資料 | Export/Import 加 WHERE 子句、或建立 MQT 再匯出 |
select count(*) from src.tab vs select count(*) from tgt.tabRUNSTATS 完成、REBIND 套用套件「DDL 先行 → 結構調整 → 自動化 Export/Import → 統計重建 → 全鏈路驗證」是 DB2 中型資料庫遷移的黃金標準。將產生腳本邏輯封裝為可重用工具類(如本文 Java 範例),配合版本控管 DDL/腳本,即可構建出可追溯、可重複、低風險的遷移交付流水線。