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

DB2 資料遷移與復制標準化流程:Export/Load 跨庫搬家、Java 自動化腳本、IXF 格式優勢與效能優化

     編輯:DB2 教學

遷移場景與目標

  • 變更表空間類型 (SMS→DMS) 或整庫遷移至新資料庫。
  • 環境:IBM x346, 3.2GHz×2, 4GB, RAID 1, DB2 V8.2.4, Win2000 Adv Server, DMS 表空間。
  • 實測 LOAD 速度:60–100 萬行/分。

八步標準化流程

  1. 導出 DDL:Control Center (db2cc) 全選表 → Generate DDL。
  2. 修改 DDL:表空間子句改為目標 (如 IN GATHER INDEX IN GATHER)。
  3. 建立目標庫與 DMS 表空間:CREATE TABLESPACE GATHER ...。
  4. 執行 DDL 建表。
  5. 自動產生 EXPORT 腳本 (附錄 1)。
  6. 自動產生 LOAD 腳本 (附錄 2)。
  7. 源庫執行 EXPORT 產生 .ixf。
  8. 目標庫執行 LOAD 高速載入。

附錄 1:Java 自動產生 EXPORT 腳本


public void createExportFile(Connection conn, String creator, String filePath) throws Exception {
    DBBase dbBase = new DBBase(conn);
    String sql = "SELECT name FROM sysibm.systables WHERE creator = '" + creator + "' AND type = 'T'";
    dbBase.executeQuery(sql);
    DBResult result = dbBase.getSelectDBResult();
    List list = new ArrayList<>();
    while (result.next()) list.add(result.getString(1));
    dbBase.close();

    StringBuilder sb = new StringBuilder();
    String nl = "\r\n";
    for (int i = 0; i < list.size(); i++) {
        sb.append("db2 \"export to aa").append(i+1).append(".ixf of ixf select * from ")
          .append(list.get(i)).append("\"").append(nl);
    }
    FileUtility.saveStringToFile(filePath, sb.toString(), false);
}

附錄 2:Java 自動產生 LOAD 腳本


public void createLoadFile(Connection conn, String creator, String filePath) throws Exception {
    DBBase dbBase = new DBBase(conn);
    String sql = "SELECT name FROM sysibm.systables WHERE creator = '" + creator + "' AND type = 'T'";
    dbBase.executeQuery(sql);
    DBResult result = dbBase.getSelectDBResult();
    List list = new ArrayList<>();
    while (result.next()) list.add(result.getString(1));
    dbBase.close();

    StringBuilder sb = new StringBuilder();
    String nl = "\r\n";
    for (int i = 0; i < list.size(); i++) {
        sb.append("db2 \"load from aa").append(i+1).append(".ixf of ixf replace into ")
          .append(list.get(i)).append(" COPY NO without prompting\"").append(nl);
    }
    FileUtility.saveStringToFile(filePath, sb.toString(), false);
}

腳本範例


-- export.bat
db2 connect to testdb user test password test
db2 "export to aa1.ixf of ixf select * from table1"
db2 "export to aa2.ixf of ixf select * from table2"
db2 connect reset

-- load.bat
db2 connect to testdb user test password test
db2 "load from aa1.ixf of ixf replace into table1 COPY NO without prompting"
db2 "load from aa2.ixf of ixf replace into table2 COPY NO without prompting"
db2 connect reset

效能與避坑錦囊

  • IXF 格式:含資料+元資料,LOAD 自動重建索引/檢查約束,比 DEL 快且安全。
  • COPY NO:不備份載入影像,最快;生產環境需時間點恢復請用 COPY YES USE TSM。
  • NONRECOVERABLE:大表可加此選項跳過日誌,載入後**必須立即備份**。
  • 並行載入:多張大表同時開多個 LOAD 視窗,配合 CPU_PARALLELISM/DISK_PARALLELISM 壓榨 I/O。
  • 外鍵/約束處理:載入前 SET INTEGRITY ... OFF,載完 IMMEDIATE CHECKED,避免逐列檢查拖慢。
  • 統計資訊同步:載入後 RUNSTATS ... WITH DISTRIBUTION AND DETAILED INDEXES ALL,保證優化器看清新資料分布。

結語

「導 DDL → 改表空間 → 建新庫 → 自動化 Export/Load」四步走,配合 IXF 格式與 LOAD REPLACE COPY NO,可在數小時內完成 TB 級跨庫遷移。Java 自動化腳本一寫終身受用,是 DBA 遷移專案的標準化利器。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved