IXF(Integrated Exchange Format)是 DB2 專有的二進制數據交換格式,包含表結構與數據,支援跨平台遷移、備份恢復、測試環境構建等場景。本文提供從建庫到批量導出導入的標準化操作流程。
db2set db2codepage=1208 # UTF-8 碼頁
db2 create database wms automatic storage yes \
using codeset UTF-8 territory cn pagesize 32768
automatic storage yes:啟用自動存儲管理,簡化表空間維護。codeset UTF-8 territory cn:指定字符集與地區,支援中文。pagesize 32768:32K 頁大小,適應大行寬表,提升大對象存儲效率。db2 create db xxdb on /app/dbdata using CODEPAGE "GBK" country "Zh_CN"
適用於需精確控制數據文件物理位置的場景,碼頁採用 GBK 兼容老系統。
腳本 exportReportData.sh 示例:
#!/bin/ksh
toDir=/home/cpsinst/bup/ # 導出目標目錄,需預先創建且有寫權限
# 表名列表,空格分隔
tab="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='ODSUSER'
for tabTemp in $tab; do
echo "Exporting $tabTemp ..."
db2 "export to ${toDir}/${tabTemp}.IXF of IXF select * from ${tabTemp}"
if [ $? -ne 0 ]; then
echo "ERROR: Export $tabTemp failed!" >&2
exit 1
fi
done
db2 connect reset
echo "All tables exported successfully."
of IXF:指定輸出格式為 IXF。select * from ${tabTemp}:全量導出;可加 WHERE 條件實現增量導出。表名.IXF,大小寫敏感文件系統下保持一致。db2 connect to myetldb
db2 set schema=odsuser
# FORCECREATE:目標表不存在時自動創建(包含索引、約束)
# COMMITCOUNT 10000:每 1 萬行提交一次,避免日誌溢出
# replace_create:表存在則先 DROP 再 CREATE,慎用於生產環境!
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"
db2 connect reset
| 選項 | 作用 | 適用場景 |
|---|---|---|
| FORCECREATE | 自動創建目標表(含索引、主鍵、外鍵) | 初始化新環境、測試數據載入 |
| COMMITCOUNT n | 每 n 行提交事務 | 大表導入防止事務日誌填滿 |
| replace_create | 表存在則 DROP 再 CREATE | 全量覆蓋刷新,**生產環境禁用** |
| replace | 表存在則 TRUNCATE 再插入,保留表結構 | 定期全量同步,保留權限/觸發器 |
| insert | 僅追加數據(默認) | 增量導入 |
| skipcount n | 跳過前 n 行 | 跳過表頭或斷點續傳 |
LOBSINFILE 相關參數。FORCECREATE 會重建身份列,導入後序列值從 1 重新開始,若業務依賴原序列值需額外處理。將導出導入封裝為參數化腳本(傳入源庫、目標庫、Schema、表清單文件),結合 crontab 或調度平台實現定時同步;導入前自動備份目標表(RENAME TO bak_表名),導入驗證通過再清理備份,構建可回滾的遷移流程。