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

DB2 數據移動實戰 (一):IMPORT / EXPORT / LOAD 三大命令核心機制、適用場景與性能對比

     編輯:DB2 教學

核心定位:跨系統數據流轉的通用介面

DB2 提供三大數據移動命令 —— IMPORT (導入)、EXPORT (導出)、LOAD (裝入),構成異構遷移、備份歸檔、測試數據構建、數據湖入湖的基石。本文系統對比三者的執行機制、事務行為、性能特徵、適用邊界,並給出演進路線圖。

命令對比全景表

維度IMPORTLOADEXPORT
核心機制SQL INSERT/INSERT UPDATE/REPLACE 路徑,走引擎完整代碼路徑繞過 SQL 層,直接格式化數據頁寫入容器,極少日誌SQL SELECT 查詢結果流式寫入文件
事務/日誌全記錄日誌 (可配置 COMMITCOUNT 批次提交)最小日誌 (僅元數據/分配頁);NONRECOVERABLE 可零日誌無日誌 (純讀操作)
並行度單線程 (可多進程分區並行)多線程並行 (CPU 核心數、容器數、ANYORDER)單線程
觸發器/約束全觸發 (RI、Check、Trigger、Generated Column)默認不觸發 (可選 CHECK DATA 驗證 RI/Check)不涉及
索引維護逐行實時維護延遲索引構建 (BUILD DEFERRED) → 事後 REORG INDEXES ALL不涉及
可用性影響行級鎖,業務可並發讀寫 (視隔離級別)表級排他鎖 (LOAD INSERT 共享鎖);ONLINE LOAD (9.7+) 降低鎖爭用共享鎖,不阻塞業務
恢復能力標準事務回滾LOAD COPY YES + 備份映像 → PITR;LOAD COPY NO → 表置 LOAD PENDING 需重載不適用
典型速度 (同等硬件)基準 1x10x ~ 50x (TB 級小時級)最快 (純順序讀)
適用數據量< 100 萬行 / 增量同步> 100 萬行 / 初始裝載 / 大批量刷新任意量 (受限於磁盤/網絡)
文件格式支援ASC, DEL, IXF, WSF (僅導入)ASC, DEL, IXF, CURSOR (管道)ASC, DEL, IXF, WSF

命令語法速查

EXPORT — 最簡單、最安全

# 導出全表至 DEL (CSV)
db2 "EXPORT TO /data/emp.del OF DEL
     MODIFIED BY CHARDEL\" COLDEL, CODEPAGE=1208
     SELECT * FROM EMPLOYEE"

# 導出查詢結果至 IXF (含元數據,適合同構遷移)
db2 "EXPORT TO /data/emp.ixf OF IXF
     SELECT EMPNO, FIRSTNME, LASTNAME, HIREDATE, SALARY
     FROM EMPLOYEE WHERE DEPT='IT'"

關鍵點:EXPORT 幾乎不會失敗;IXF 格式攜帶列定義、索引定義、約束定義,IMPORT ... CREATE INTO 可一鍵重建表結構。

IMPORT — 靈活、安全、中等性能

# 追加模式 (默認 INSERT)
db2 "IMPORT FROM /data/emp.del OF DEL
     MODIFIED BY CHARDEL\" COLDEL, CODEPAGE=1208
     COMMITCOUNT 1000
     INSERT INTO EMPLOYEE"

# 更新/合併模式 (需主鍵/唯一索引)
db2 "IMPORT FROM /data/emp_upd.del OF DEL
     MODIFIED BY CHARDEL\" COLDEL, CODEPAGE=1208
     INSERT_UPDATE INTO EMPLOYEE"

# 替換模式 (截斷表再裝載)
db2 "IMPORT FROM /data/emp_full.del OF DEL
     MODIFIED BY CHARDEL\" COLDEL, CODEPAGE=1208
     REPLACE INTO EMPLOYEE"

# 從 IXF 重建表結構並導入
db2 "IMPORT FROM /data/emp.ixf OF IXF
     CREATE INTO NEW_EMPLOYEE"

COMMITCOUNT:每 N 行提交一次,避免日誌爆滿、鎖升級;建議 500~5000 視行寬度調整。

LOAD — 極致性能、操作謹慎

# 追加模式 (保留現有數據)
db2 "LOAD FROM /data/emp.del OF DEL
     MODIFIED BY CHARDEL\" COLDEL, CODEPAGE=1208 ANYORDER FASTPARSE
     INSERT INTO EMPLOYEE
     COPY YES USE TSM OPEN 2 SESSIONS
     NONRECOVERABLE"

# 替換模式 (截斷表)
db2 "LOAD FROM /data/emp_full.del OF DEL
     MODIFIED BY CHARDEL\" COLDEL, CODEPAGE=1208 ANYORDER
     REPLACE INTO EMPLOYEE
     COPY YES USE TSM"

# 從游標管道直接裝入 (跨庫零落地)
db2 "DECLARE C1 CURSOR FOR SELECT * FROM SOURCE_DB.EMPLOYEE"
db2 "LOAD FROM C1 OF CURSOR
     INSERT INTO TARGET_DB.EMPLOYEE
     COPY YES USE TSM"

關鍵參數:

  • ANYORDER:允許並行插入不保證順序,性能提升 30%+。
  • FASTPARSE:跳過數據驗證 (數值範圍、日期合法性),僅在極高信任度數據源使用。
  • COPY YES/NO:YES 需配合 TSM/備份目錄生成拷貝映像,支持前滾恢復;NO 速度最快但表進入 LOAD PENDING,需 LOAD TERMINATE 或重載才能訪問。
  • NONRECOVERABLE:跳過拷貝映像生成,極速但不可前滾恢復 (需自行備份)。

演進決策路線圖

  1. 日常增量同步 / 少量測試數據 / 異構導入 → IMPORT (安全、觸發器生效、易調試)。
  2. 初始化數據倉庫 / 歷史分區裝載 / TB 級大表刷新 → LOAD INSERT/REPLACE + COPY YES + ANYORDER。
  3. 極速灌數據、事後可重跑、無需時間點恢復 → LOAD ... NONRECOVERABLE (最快,風險自擔)。
  4. 跨庫零落地遷移 → LOAD FROM CURSOR (源端游標直接推送目標端,避免中間文件 I/O)。
  5. 導出歸檔 / 異構交換 → EXPORT ... OF DEL/IXF;IXF 保留完整 Schema,DEL 通用性最強。

常見陷阱與避坑

陷阱癥狀根因對策
LOAD 後表處於 LOAD PENDINGSELECT 報 SQL0668NCOPY NO 且未終止/重載執行 LOAD TERMINATE 或 重新 LOAD COPY YES
IMPORT 極慢、日誌滿SQL0964C / 事務回滾未設置 COMMITCOUNT / 批次過大COMMITCOUNT 1000-5000;增大 LOGFILSIZ/LOGPRIMARY
IXF 導入索引/約束缺失目標表無主鍵/外鍵IMPORT 不自動建立索引/約束 (除 CREATE INTO)導出前 db2look -e -t TABLE 導出 DDL 獨立執行
DEL 文件中文亂碼導入後字符損壞CODEPAGE 未指定或不匹配顯式 CODEPAGE=1208 (UTF-8) 或 1386 (GBK)
FASTPARSE 導入髒數據數值溢出、日期無效卻未報錯驗證被跳過僅用於可信源;生產嚴禁

自動化管道模板 (Bash + DB2 CLP)

#!/bin/bash
# 每日增量同步模板: EXPORT (源) -> 壓縮傳輸 -> IMPORT (目標)
SRC_DB=SRCDB; TGT_DB=TGTDB; TABLE=EMPLOYEE; DATE_COL=LAST_UPDATED
TS=$(date -d "1 day ago" +%Y-%m-%d)
EXP_FILE="/tmp/${TABLE}_${TS}.del.gz"

# 1. 源端導出 (增量)
db2 connect to $SRC_DB
db2 "EXPORT TO ${EXP_FILE%.gz} OF DEL MODIFIED BY CHARDEL\" COLDEL, CODEPAGE=1208
     SELECT * FROM $TABLE WHERE DATE($DATE_COL) = '$TS'"
gzip ${EXP_FILE%.gz}

# 2. 傳輸 (scp/rsync/s3)
scp $EXP_FILE target_host:/data/incoming/

# 3. 目標端導入
ssh target_host "
  db2 connect to $TGT_DB
  gunzip -c $EXP_FILE | db2 \"IMPORT FROM /dev/stdin OF DEL
       MODIFIED BY CHARDEL\" COLDEL, CODEPAGE=1208 COMMITCOUNT 2000
       INSERT_UPDATE INTO $TABLE\"
"

掌握三大命令的機制邊界與參數微調,即可構建從日常增量同步到 TB 級初始化裝載的全譜系數據移動能力,支撐遷移、歸檔、分析、雲上混合等多元業務場景。

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