IBM DB2 作為企業級關聯式資料庫的佼佼者,廣泛應用於核心業務系統。資料庫管理員(DBA)在職業生涯中不可避免地會面臨資料庫遷移任務,其中跨平台遷移(例如從 Windows 遷移至 AIX 或 Linux)最為棘手。DB2 內建的備份/恢復功能僅支援同質平台間的遷移(Windows→Windows、AIX→AIX),缺乏原生的跨平台遷移工具。本文基於實戰經驗,系統梳理 DB2 跨平台遷移的標準化流程、核心命令與避坑指南,助您平穩完成異構平台間的資料搬遷。
經過實戰驗證,跨平台遷移需嚴格遵循以下 11 個階段:
db2move 匯出 IXF 格式資料db2look 導出結構定義db2move import 自動建表並載入資料務必記錄實例級、資料庫級、註冊表變數、表空間與套件資訊:
# 實例配置
db2 get dbm cfg
# 資料庫配置
db2 get db cfg for <source_db_name>
# 註冊表變數
db2set -all
# 表空間詳情(需先連接資料庫)
db2 list tablespaces show detail
# 套件清單
db2 list packages
關鍵提醒:複雜資料庫需重點關注 appgroup_mem_sz(應用程式組記憶體),若不足會導致後續 db2look 生成 DDL 失敗。
使用 DB2 Control Center (db2cc) 直觀瀏覽表、視圖、觸發器、UDF、存儲過程。重點排查:
db2move <dbname> export -u <username> -p <password>
產出 IXF 檔案與 db2move.lst 清單。大型資料庫可能耗時數小時(實測 2+ 小時)。
db2look -d <dbname> -e -o <ddlfile> -i <username> -w <password>
若報錯 SQL1224N 或記憶體不足,需先調大 appgroup_mem_sz:
db2 update db cfg for <dbname> using appgroup_mem_sz 51368
建庫後參照源端調整核心參數:
db2 update db cfg for <dbname> using dbheap 41599
db2 update db cfg for <dbname> using catalogcache_sz 38049
db2 update db cfg for <dbname> using logbufsz 256
db2 update db cfg for <dbname> using util_heap_sz 20000
db2 update db cfg for <dbname> using buffpage 1000
db2 update db cfg for <dbname> using sortheap 4096
db2 update db cfg for <dbname> using stmtheap 16384
db2 update db cfg for <dbname> using applheapsz 10242
複雜資料庫必須預調日誌參數防止導入/建物件時日誌滿:
db2 update db cfg for <dbname> using logfilsiz 8192
db2 update db cfg for <dbname> using mincommit 1
db2 update db cfg for <dbname> using logprimary 24
db2 update db cfg for <dbname> using logsecond 108
db2move <targetdbname> import -u <username> -p <password>
為何先導數據再跑 DDL? db2move import 會自動建表與索引,繞過複雜約束(FK、CHECK、Trigger)在導入階段的阻擋,是大型複雜資料庫唯一可行的順序。
查看 db2move.lst 與 IMPORT.OUT,若有錯誤需修正後從步驟 5 重來。
db2 connect to <targetdbname> user <username> using <password>
db2 -tvf <ddlfile> > createSchema.log
db2 connect reset
執行前需手動移除腳本開頭的 CONNECT 語句。
日誌中大量「表已存在」錯誤屬正常(步驟 6 已建表),重點檢查視圖、觸發器、UDF、存儲過程、約束的創建狀態。
Java 存儲過程重新註冊:
db2 call sqlj.install_jar ('jar_url','jar_id')
db2 drop procedure <procname>
db2 create procedure <procname> external name 'jar_id:classname' language java parameter style DB2GENERAL fenced modifies sql data
db2 grant execute on procedure <procname> to public
Identity 列重置:
db2 alter table <tabname> alter column <colname> restart with <newstartnumber>
-- newstartnumber = 當前最大值 + 1
修改應用配置指向新庫,執行完整回歸測試,確認業務邏輯、效能指標達標。
db2set DB2CODEPAGE=1386 需重啟實例生效logretain off)加速導入,遷移後再開啟runstats on table all with distribution and detailed indexes all 更新統計資訊跨平台遷移是系統級工程,建議先在測試環境全流程演練,建立標準化 SOP。歡迎同行交流補充,共同完善最佳實踐。