首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

跨平台遷移實戰:AIX 上的 DB2 資料遷移至 Linux 完整流程

     編輯:DB2 教學

從 AIX 遷移 DB2 資料庫到 Linux 是常見異構平台遷移場景。本文提供零停機風險、資料完整性可驗證的標準化流程,核心策略為:DDL 拆分 → IXF 匯出 → LOAD 匯入(含 identityoverride)。

階段一:AIX 端準備(來源資料庫)

1. 產生完整 DDL 腳本

db2look -d SAMPLE -z DB2INST1 -e -o sample.ddl -i db2inst1 -w db2inst1
# -d: 資料庫 | -z: 綱要 | -e: 匯出 DDL | -o: 輸出檔 | -i/-w: 實例/密碼

2. 拆分 DDL 為三類腳本(關鍵步驟)

使用文字編輯器將 sample.ddl 拆分為:

  • sample_tabs.ddl:建表、建索引語句
  • sample_forgnkeys.ddl:外鍵約束語句
  • sample_triggers.ddl:觸發器語句

原因:先建表/索引 → 匯入資料 → 再建外鍵/觸發器,避免匯入時觸發約束檢查與觸發器導致效能低落或失敗。

3. 產生匯出腳本

db2 "select 'export to ' || rtrim(tabname) || '.ixf of ixf select * from ' || rtrim(tabname) || ';' 
     from syscat.tables where tabschema = 'DB2INST1'" > export.sql

編輯 export.sql,移除標題/尾部雜訊,僅保留 export 指令。

4. 產生匯入腳本(使用 LOAD)

db2 "select 'load from ' || rtrim(tabname) || '.ixf of ixf insert into ' || rtrim(tabname) || ';' 
     from syscat.tables where tabschema = 'DB2INST1'" > load.sql

5. 處理 IDENTITY 欄位(關鍵)

  1. 檢視 sample_tabs.ddl 找出含 GENERATED ALWAYS AS IDENTITY 的表
  2. 編輯 load.sql,對應表的 LOAD 指令加入 modified by identityoverride:
    load from MYTABLE.ixf of ixf modified by identityoverride insert into MYTABLE;

作用:允許 LOAD 時直接寫入身分欄位原始值,保持序號一致性,避免重新產生導致主鍵/外鍵關聯斷裂。

6. 執行匯出

db2 -tvf export.sql

階段二:檔案傳輸

將下列檔案複製至 Linux 目標主機:

  • sample_tabs.ddl、sample_forgnkeys.ddl、sample_triggers.ddl
  • load.sql
  • 所有 .ixf 資料檔

階段三:Linux 端還原(目標資料庫)

  1. 建立資料庫:
    CREATE DATABASE SAMPLE ... (配置表空間、參數)
  2. 建立表與索引:
    db2 connect to SAMPLE
    db2 -tvf sample_tabs.ddl
  3. 載入資料:
    cd /path/to/ixf/files
    db2 -tvf load.sql
  4. 建立外鍵與觸發器:
    db2 -tvf sample_forgnkeys.ddl
    db2 -tvf sample_triggers.ddl
  5. 執行 RUNSTATS(更新統計資訊,確保最佳化器有正確統計):
    # 可用類似產生 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.sql

遷移驗證清單

  • [ ] 表筆數對帳:SELECT COUNT(*) FROM table 雙邊比對
  • [ ] 主鍵/外鍵約束狀態:db2 "select tabname, constname, type from syscat.tabconst where tabschema='DB2INST1'"
  • [ ] IDENTITY 欄位最大值對帳
  • [ ] 觸發器啟用狀態
  • [ ] RUNSTATS 完成確認
  • [ ] 應用端連線測試

常見坑點提醒

  • 編碼一致性:AIX/Linux 皆建立 UTF-8 資料庫,IXF 為二進制格式不受編碼影響
  • 大小寫敏感:Linux 檔案系統區分大小寫,腳本中表名/綱要名大小寫需與來源完全一致
  • identityoverride 僅限 LOAD,IMPORT 不支援
  • 大表 LOAD 期間表處於 LOAD PENDING 狀態,完成後需 SET INTEGRITY IMMEDIATE CHECKED(DB2 自動處理)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved