從 AIX 遷移 DB2 資料庫到 Linux 是常見異構平台遷移場景。本文提供零停機風險、資料完整性可驗證的標準化流程,核心策略為:DDL 拆分 → IXF 匯出 → LOAD 匯入(含 identityoverride)。
db2look -d SAMPLE -z DB2INST1 -e -o sample.ddl -i db2inst1 -w db2inst1
# -d: 資料庫 | -z: 綱要 | -e: 匯出 DDL | -o: 輸出檔 | -i/-w: 實例/密碼
使用文字編輯器將 sample.ddl 拆分為:
sample_tabs.ddl:建表、建索引語句sample_forgnkeys.ddl:外鍵約束語句sample_triggers.ddl:觸發器語句原因:先建表/索引 → 匯入資料 → 再建外鍵/觸發器,避免匯入時觸發約束檢查與觸發器導致效能低落或失敗。
db2 "select 'export to ' || rtrim(tabname) || '.ixf of ixf select * from ' || rtrim(tabname) || ';'
from syscat.tables where tabschema = 'DB2INST1'" > export.sql
編輯 export.sql,移除標題/尾部雜訊,僅保留 export 指令。
db2 "select 'load from ' || rtrim(tabname) || '.ixf of ixf insert into ' || rtrim(tabname) || ';'
from syscat.tables where tabschema = 'DB2INST1'" > load.sql
sample_tabs.ddl 找出含 GENERATED ALWAYS AS IDENTITY 的表load.sql,對應表的 LOAD 指令加入 modified by identityoverride:
load from MYTABLE.ixf of ixf modified by identityoverride insert into MYTABLE;作用:允許 LOAD 時直接寫入身分欄位原始值,保持序號一致性,避免重新產生導致主鍵/外鍵關聯斷裂。
db2 -tvf export.sql
將下列檔案複製至 Linux 目標主機:
sample_tabs.ddl、sample_forgnkeys.ddl、sample_triggers.ddlload.sql.ixf 資料檔CREATE DATABASE SAMPLE ... (配置表空間、參數)db2 connect to SAMPLE
db2 -tvf sample_tabs.ddlcd /path/to/ixf/files
db2 -tvf load.sqldb2 -tvf sample_forgnkeys.ddl
db2 -tvf sample_triggers.ddl# 可用類似產生 export/load 的方式產生 runstats 腳本
db2 "select 'runstats on table ' || rtrim(tabschema) || '.' || rtrim(tabname) || ' and indexes all;'
from syscat.tables where tabschema = 'DB2INST1'" > runstats.sql
db2 -tvf runstats.sqlSELECT COUNT(*) FROM table 雙邊比對db2 "select tabname, constname, type from syscat.tabconst where tabschema='DB2INST1'"identityoverride 僅限 LOAD,IMPORT 不支援LOAD PENDING 狀態,完成後需 SET INTEGRITY IMMEDIATE CHECKED(DB2 自動處理)