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

DB2 資料庫建立與 IXF 匯出/匯入完整範例 (含 Shell 腳本)

     編輯:DB2 綜合知識

前言

IXF (Integrated Exchange Format) 是 DB2 原生的資料交換格式,包含資料結構與資料內容,適合同構環境遷移、備份還原。本文提供建立 UTF-8 資料庫、Shell 腳本批次匯出/匯入 IXF 的完整範例。

一、建立 UTF-8 資料庫

# 設定實例程式碼頁 (僅影響後續建立的資料庫)
$ db2set DB2CODEPAGE=1208

# 建立資料庫:UTF-8、中文地區、32K 頁面
$ db2 "CREATE DATABASE wms AUTOMATIC STORAGE YES USING CODESET UTF-8 TERRITORY CN PAGESIZE 32768"

# 若需指定資料庫目錄 (非自動儲存)
$ db2 "CREATE DATABASE xxdb ON /app/dbdata USING CODEPAGE 'GBK' COUNTRY 'ZH_CN'"

關鍵參數:

  • CODESET UTF-8 / CODEPAGE 1208:支援多國語言。
  • TERRITORY CN:中文排序/日期格式。
  • PAGESIZE 32768 (32K):支援較長列、提升大物件效能。

二、批次匯出 Shell 腳本 (exportReportData.sh)

#!/bin/bash
# exportReportData.sh - 批次匯出指定 Schema 下的多張表為 IXF

TO_DIR="/home/cpsinst/bup/"
SCHEMA="ODSUSER"
TABLES="UNTECK_ATTACHMENT_HIS UNTECK_BUSI_LOG UNTECK_DICT_ENTRY UNTECK_DICT_TYPE \
        UNTECK_LOGIN_LOG UNTECK_MENU UNTECK_OPERATION UNTECK_ORGANIZATION \
        UNTECK_PRIMARYKEY UNTECK_RESOURCE UNTECK_ROLE UNTECK_ROLE_RESOURCE \
        UNTECK_USER UNTECK_USER_ROLE"

db2 connect to cpsdb
db2 "SET SCHEMA = '$SCHEMA'"

for TAB in $TABLES; do
    echo "Exporting $TAB ..."
    db2 "EXPORT TO ${TO_DIR}/${TAB}.IXF OF IXF SELECT * FROM ${TAB}"
    if [ $? -ne 0 ]; then
        echo "ERROR: Export $TAB failed!" >&2
        exit 1
    fi
done

db2 connect reset
echo "All tables exported successfully."

使用方式:

chmod +x exportReportData.sh
./exportReportData.sh 2>&1 | tee export.log

三、批次匯入指令範例

db2 connect to myetldb;
db2 SET SCHEMA=odsuser;

db2 "IMPORT FROM ETL_BUSI_TYPE.IXF OF IXF \
     MODIFIED BY FORCECREATE COMMITCOUNT 10000 \
     REPLACE_CREATE INTO ETL_BUSI_TYPE"

db2 "IMPORT FROM ETL_BUSI_TYPE_TOSEND.IXF OF IXF \
     MODIFIED BY FORCECREATE COMMITCOUNT 10000 \
     REPLACE_CREATE INTO ETL_BUSI_TYPE_TOSEND"

db2 "IMPORT FROM ETL_CONTACT_PEPOLE.IXF OF IXF \
     MODIFIED BY FORCECREATE COMMITCOUNT 10000 \
     REPLACE_CREATE INTO ETL_CONTACT_PEPOLE"

關鍵修飾詞說明:

  • FORCECREATE:目標表不存在時自動依 IXF 定義建立 (含索引、約束)。
  • COMMITCOUNT 10000:每 10,000 列提交一次,避免交易日誌暴增並釋放鎖。
  • REPLACE_CREATE:表存在則截斷資料並重建;不存在則建立。
  • REPLACE:表存在則截斷資料 (保留表結構);不存在則報錯。
  • INSERT:僅插入 (表必須存在),違反主鍵會報錯。

四、常見問題與對策

問題原因解決
匯入報 SQL3110N (Utility is interrupted)磁碟空間不足 / 日誌滿增加檔案系統空間、調大 LOGFILSIZ/LOGPRIMARY
匯入極慢未使用 COMMITCOUNT、索引過多加 COMMITCOUNT、匯入前 DROP INDEX 完再 CREATE INDEX
字元集亂碼來源/目標資料庫 CODEPAGE 不同確保兩端 DB2CODEPAGE 一致,或使用 MODIFIED BY CODEPAGE=1208
IXF 檔案過大大表匯出單一檔案使用 db2move 並行匯出、或分區表並行處理

五、進階:db2move 並行匯出/匯入 (大型資料庫)

# 匯出 (指定 Schema、表清單)
$ db2move cpsdb EXPORT -sn ODSUSER -tn "TAB1,TAB2,TAB3"

# 匯入 (自動讀取當前目錄 *.ixf, *.msg)
$ db2move myetldb IMPORT -io REPLACE_CREATE

db2move 可多執行緒並行處理多張表,大幅縮短遷移窗口。

結語

掌握 IXF 匯出/匯入與 db2move 並行工具,能滿足多數同構 DB2 環境的資料遷移、備份還原、測試資料製備需求。關鍵在於:統一 CODEPAGE、善用 COMMITCOUNT、大表並行處理。

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