| 維度 | 源環境 (AIX) | 目標環境 (Linux) |
|---|---|---|
| OS | AIX | Linux |
| DB2 版本 | V8.1 | V8.1 |
| 實例數 | 2 (SRCDB1, SRCDB2) | 2 |
| 對象規模 | 每實例百餘表、大量索引/FK/Trigger/Procedure、含 IDENTITY 列 | 同步復刻 |
| 痛點 | 無準確創建腳本、跨平台 (大端→小端) 不支持 BACKUP/RESTORE、db2move 不遷移對象且受限 IDENTITY |
核心思想:對象結構與數據分離、依賴順序拓撲排序、身份列數據保真。
# DB2 V8.1 自身 db2look 不支持 Procedure/Trigger/UDF
# 需從一台 DB2 V8.2+ 機器 CATALOG 遠程源庫後抽取
db2 catalog db SRCDB1 as SRCDB1
db2look -d SRCDB1 -e -o srcdb1.ddl -a -i user_srcdb1 -w pw_srcdb1
參數:-e 導出 DDL、-a 所有 Schema、-i/-w 遠程認證。
編輯 srcdb1.ddl 按依賴順序拆為四文件:
srcdb1_tables.ddl:SEQUENCE、UDF、TABLE、VIEW、INDEX。srcdb1_foreignkeys.ddl:ALTER TABLE ADD CONSTRAINT FOREIGN KEY。srcdb1_triggers.ddl:CREATE TRIGGER。srcdb1_procedures.ddl:CREATE PROCEDURE (SQL/Java)。原則:先建表/索引/視圖 → 再導數據 → 最後建 FK/Trigger/Procedure,避免導數據時觸發器誤火、FK 阻塞。
db2 "SELECT 'EXPORT TO ' || RTRIM(TABNAME) || '.ixf OF IXF SELECT * FROM ' || RTRIM(TABNAME) || ';'
FROM SYSCAT.TABLES
WHERE TABSCHEMA IN ('SRCDB1','ASN','SQLDBA','DB2DBG')" > srcdb1_export.sql
編輯去除頭尾統計信息,保留純命令。
db2 "SELECT 'LOAD FROM ' || RTRIM(TABNAME) || '.ixf OF IXF INSERT INTO ' || RTRIM(TABNAME) || ';'
FROM SYSCAT.TABLES
WHERE TABSCHEMA IN ('SRCDB1','ASN','SQLDBA','DB2DBG')" > srcdb1_load.sql
srcdb1_tables.ddl 中檢索含 GENERATED ALWAYS AS IDENTITY 的表名。srcdb1_load.sql 對應行插入 MODIFIED BY IDENTITYOVERRIDE,強制使用源數據文件中的身份值。db2 load from test.ixf of ixf modified by identityoverride insert into TEST
db2 -tvf srcdb1_export.sql # 生成 *.ixf 文件
# 將所有 DDL 腳本 + *.ixf 打包傳輸至目標 Linux
db2icrt SRCDB1db2 create database SRCDB1 (配置表空間/參數)。db2 connect to SRCDB1 → db2 -tvf srcdb1_tables.ddlcd ixf目錄 → db2 -tvf srcdb1_load.sqlforeignkeys、triggers、procedures 腳本。./configure --prefix=/usr/local/apache2 --enable-module=so
make && make install
ln -s /usr/local/apache2/bin/apachectl /sbin/apachectl
apachectl start
驗證 httpd -l 輸出含 mod_so.c。
./configure --prefix=/usr/local/php --with-apxs2=/usr/sbin/apxs \
--without-mysql --with-ibm-db2=/home/reportdb/sqllib
make && make install
cp php.ini-dist /usr/local/lib/php.ini
DocumentRoot "/home/web/www/"
DirectoryIndex index.php index.html.var index.cgi index.html
AddType application/x-httpd-php .php .inc
LoadModule php4_module modules/libphp4.so
if test -f /home/reportdb/sqllib/db2profile; then
. /home/reportdb/sqllib/db2profile
fi
重啟 Apache:apachectl restart。
瀏覽 https://localhost/test.php (含 ),確認 ibm_db2 模塊載入成功。
| 階段 | 關鍵動作 | 風險點 |
|---|---|---|
| DB 結構 | db2look(V8.2) → 分層 DDL → 依序執行 | V8.1 本地 db2look 缺失 Procedure/Trigger |
| DB 數據 | EXPORT IXF → LOAD IDENTITYOVERRIDE | 身份列數據不一致、大表導出耗時 |
| 中間件 | Apache DSO + PHP Unified ODBC | 驅動版本匹配、DB2 profile 注入 |
| 驗收 | 數據行數核對、應用功能冒煙測試、性能基線對比 | 隱式依賴 (如外部 UDF 路徑) |
本方案同樣適用於 Linux→AIX、Solaris→Linux 等異構 Unix/Linux 間遷移,核心邏輯不變。