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

DB2 資料庫複製與遷移實戰:Export/Load 方案與自動化腳本

     編輯:DB2 教學

適用場景

  • 變更表空間 (如 SMS → DMS)。
  • 將全庫資料遷移至新資料庫 (含結構與資料)。
  • 測試環境:IBM x346, 3.2GHz×2, 4GB, RAID 1, DB2 V8.2.4, Win2000, DMS 表空間,Load 速度 60~100 萬列/分。

遷移流程 8 步驟

  1. Control Center (db2cc) 選取源庫所有表 → 產生 DDL 腳本。
  2. 修改 DDL:調整表空間、分區策略等 (如改為 GATHER 表空間)。
  3. 建立目標資料庫與 DMS 表空間 (GATHER)。
  4. 在目標庫執行修改後的 DDL 建立結構。
  5. 編寫程式查詢源庫 SYSCAT.TABLES → 自動產生 EXPORT 腳本。
  6. 同理產生 LOAD (或 IMPORT) 腳本。
  7. 連接源庫執行 Export 腳本,產生 IXF 檔。
  8. 連接目標庫執行 Load 腳本完成遷移。

附錄:自動化腳本生成範例 (Java/JDBC)

1. 產生 Export 腳本

public void createExportFile(Connection conn, String creator, String filePath) throws Exception {
    String sql = "SELECT name FROM sysibm.systables WHERE creator = '" + creator + "' AND type = 'T'";
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery(sql);
    List tables = new ArrayList<>();
    while (rs.next()) tables.add(rs.getString(1));
    rs.close(); stmt.close();

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

2. 產生 Load 腳本

public void createLoadFile(Connection conn, String creator, String filePath) throws Exception {
    String sql = "SELECT name FROM sysibm.systables WHERE creator = '" + creator + "' AND type = 'T'";
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery(sql);
    List tables = new ArrayList<>();
    while (rs.next()) tables.add(rs.getString(1));
    rs.close(); stmt.close();

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

3. Export 腳本範例 (export.db2)

db2 connect to srcdb user usr password pwd
db2 "export to aa1.ixf of ixf select * from table1"
db2 "export to aa2.ixf of ixf select * from table2"
db2 connect reset

4. Load 腳本範例 (load.db2)

db2 connect to tgtdb user usr password pwd
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

關鍵優化建議

  • 大表並行 Export (多執行緒同時導出不同表)。
  • Load 使用 NONRECOVERABLE 避免日誌開銷,事後立即完整備份。
  • IXF 格式保留型別資訊,比 DEL 更安全。
  • 遷移前關閉目標表索引/約束,載入完成後重建,大幅縮短時間。
  • 使用 db2move 工具可簡化全庫搬遷 (支援 LOAD/INSERT 模式)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved