| 源類型 (V6/V7) | 目標建議類型 (V10+) | 調整原因 |
| LONG VARCHAR / LONG VARGRAPHIC | CLOB / DBCLOB | 舊類型已棄用,LOB 功能更強 |
| CHAR(n) FOR BIT DATA | BINARY(n) / VARBINARY(n) | 標準類型,避免字符集轉換問題 |
| DATALINK | VARCHAR(1024) + 應用層管理 | DATALINK 已移除 (V11+) |
| STRUCTURED TYPE (非實例化) | JSON / 關系化拆解 | 複雜類型維護成本高 |
2. 函數/過程體內系統表引用更新
-- 源端可能引用舊系統表
SELECT * FROM SYSIBM.SYSTABLES -- V6/V7
-- 目標端需改為
SELECT * FROM SYSCAT.TABLES -- V8+ 標準編目視圖
-- 自動化替換腳本
sed -i 's/SYSIBM\.SYSTABLES/SYSCAT.TABLES/g' /tmp/phase3_logic.sql
sed -i 's/SYSIBM\.SYSCOLUMNS/SYSCAT.COLUMNS/g' /tmp/phase3_logic.sql
sed -i 's/SYSIBM\.SYSINDEXES/SYSCAT.INDEXES/g' /tmp/phase3_logic.sql
# ... 更多映射參考 DB2 遷移指南 Appendix
3. 觸發器遞歸/級聯限制
V7 允許觸發器間接激活自身 (遞歸),V8+ 默認禁止 (MAX_TRIGGER_NESTING_LEVEL 限制)。遷移前必須審查所有觸發器邏輯,重構為非遞歸模式或顯式設置 db2set DB2_MAX_TRIGGER_NESTING_LEVEL=16。
4. 統計信息遷移
# 源端導出統計 (db2look 不包含統計)
db2 "CALL SYSPROC.EXPORT_STATS('SOURCE_DB', '/tmp/stats_exp', 'C')"
# 目標端導入 (數據裝載後)
db2 "CALL SYSPROC.IMPORT_STATS('TARGET_DB', '/tmp/stats_exp', 'C')"
# 或重新收集 (推薦,數據分布可能已變)
db2 "CALL SYSPROC.ADMIN_CMD('RUNSTATS ON TABLE ALL WITH DISTRIBUTION AND DETAILED INDEXES ALL')"
5. 遷移驗證清單
| 驗證項 | 方法 | 通過標準 |
| 對象數量一致 | 源/目標 SELECT COUNT(*) FROM SYSCAT.TABLES/VIEWS/INDEXES/... | 核心對象數一致 (允許系統表差異) |
| DDL 語義等價 | db2look 導出對比 (忽略存儲子句/表空間名) | 關鍵屬性: 列定義、約束、索引鍵、分區鍵 |
| 行數一致 | 全表 COUNT(*) 對比 (抽樣大表) | 誤差 < 0.01% (並發寫入窗口除外) |
| 校驗和一致 | db2 "CALL SYSPROC.CHECKSUM_TABLE('SCHEMA.TABLE')" | MD5/CRC32 完全一致 |
| 應用功能測試 | 自動化測試套件 / 核心業務流程回歸 | 零阻斷錯誤,性能基線達標 |
工具鏈升級:db2move + db2look 組合拳
# 1. 導出數據 (db2move) - 並行、LOB 支持、XML 支持
db2move SOURCE_DB EXPORT -u db2admin -w password -sn ALL -tn ".*" -l /tmp/lob_path -u
# 2. 導入數據 (db2move) - 目標端
db2move TARGET_DB IMPORT -u db2admin -w password -io REPLACE_CREATE -l /tmp/lob_path
# 3. 大表並行加載 (LOAD) - 替代 IMPORT
# 從 db2move 生成的 .ixf/.msg 文件構建 LOAD 命令
db2 "LOAD FROM /tmp/large_table.ixf OF IXF
MODIFIED BY LOBSINFILE
REPLACE INTO SCHEMA.LARGE_TABLE
NONRECOVERABLE INDEXING MODE AUTOSELECT
STATISTICS YES WITH DISTRIBUTION"
總結
DB2 跨版本遷移的 DDL 提取核心原則:「高版本工具操作低版本數據庫」。通過 db2look -e -x -a -td% 在 V8+ 客戶端遠程編目 V6/V7 源庫,可獲得包含 UDF、Trigger、權限、存儲配置在內的完整 DDL。配合分段部署、類型映射、系統表引用更新、統計信息遷移、校驗和驗證,構建零風險遷移交付體系。
- 上一篇文章: DB2 在 Linux 下安裝指南:Caldera OpenLinux 2.4 環境準備與 JDK 替換
- 下一篇文章: SQL 性能調優核心原則與 DB2 實戰優化指南:從寫法到執行計劃的系統性提升
Copyright ©
程式碼之家 All Rights Reserved