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

DB2 數據移動三板斧:IMPORT / EXPORT / LOAD 命令詳解與文件格式規範

     編輯:DB2 教學

核心概念:三大命令定位與適用場景

命令方向性能日誌觸發器/約束典型場景
IMPORT文件 → 表中 (SQL 插入)記錄觸發小/中量、需業務邏輯驗證、異構遷移
EXPORT表 → 文件高不記錄不適用備份、異構導出、報表數據準備
LOAD文件 → 表極高 (頁級直寫)可選 (NONRECOVERABLE/COPY YES)不觸發 (約束延後檢查)大批量初始化、數據倉庫裝載、TB 級數據

文件格式規範:ASC / DEL 兩大家族

1. ASC (非定界 ASCII) — 固定寬度位置定義

每行由行定界符分隔,列由 起始/結束字節位置 固定。需配合 MODIFIED BY 指定位置映射。

# 示例數據 (無分隔符,純位置)
10 head Office 160 corporate new york
15 new england 50 eastern boston
20 mid atlantic 10 eastern washington
# 列定義:1-3=id, 4-15=name, 16-19=code, 20-30=type, 31-50=city

2. DEL (定界 ASCII) — 分隔符分隔,最通用

行由換行符分隔,列由列定界符分隔 (默認逗號),字符串可用字符定界符包裹 (默認雙引號)。

# 標準 CSV 風格
10,"head Office",160,"corporate","new york"
15,"new england",50,"eastern","boston"
20,"mid atlantic",10,"eastern","washington"

# 修改定界符示例
MODIFIED BY COLDEL; CHARDEL" DELPRIORITYCHAR
# 列分號、字符雙引號、定界符優先級字符模式

常用 MODIFIED BY 選項速查

選項含義默認值
COLDEL<char>列定界符, (逗號)
CHARDEL<char>字符定界符" (雙引號)
DEL_PRIORITY_CHAR字符定界符優先於列定界符解析否
USEDEFAULTS缺失列使用默認值否
NOROWWARNINGS抑制行警告否
CODEPAGE=1208UTF-8 編碼系統編碼

命令實戰範例

EXPORT — 導出全表/查詢結果

# 導出全表到 DEL 文件
db2 "EXPORT TO /data/emp.del OF DEL MODIFIED BY CHARDEL\" SELECT * FROM EMPLOYEE"

# 導出查詢結果 (帶 WHERE)
db2 "EXPORT TO /data/emp_act.del OF DEL SELECT * FROM EMPLOYEE WHERE DEPT='IT'"

IMPORT — 導入數據,支持多種模式

# 1. INSERT 模式 (默認) - 違反主鍵報錯繼續
db2 "IMPORT FROM /data/emp.del OF DEL MODIFIED BY CHARDEL\" INSERT INTO EMPLOYEE"

# 2. INSERT_UPDATE - 主鍵存在更新,不存在插入
db2 "IMPORT FROM /data/emp.del OF DEL MODIFIED BY CHARDEL\" INSERT_UPDATE INTO EMPLOYEE"

# 3. REPLACE - 截斷表後裝載 (需獨佔)
db2 "IMPORT FROM /data/emp.del OF DEL MODIFIED BY CHARDEL\" REPLACE INTO EMPLOYEE"

# 4. CREATE 模式 - 自動建表 (僅限 PC/IXF 格式)
db2 "IMPORT FROM /data/emp.ixf OF IXF CREATE INTO NEW_EMP"

LOAD — 高性能裝載,分階段執行

# 1. 基礎裝載 (不可恢復,速度最快)
db2 "LOAD FROM /data/emp.del OF DEL MODIFIED BY CHARDEL\" REPLACE INTO EMPLOYEE NONRECOVERABLE"

# 2. 可恢復裝載 (需備份鏡像,支持前滾)
db2 "LOAD FROM /data/emp.del OF DEL MODIFIED BY CHARDEL\" REPLACE INTO EMPLOYEE COPY YES USE TSM"

# 3. 追加模式 (保留現有數據)
db2 "LOAD FROM /data/emp.del OF DEL MODIFIED BY CHARDEL\" INSERT INTO EMPLOYEE"

# 4. 統計同步 (裝載後自動 RUNSTATS)
db2 "LOAD FROM /data/emp.del OF DEL MODIFIED BY CHARDEL\" REPLACE INTO EMPLOYEE STATISTICS YES"

LOAD 關鍵階段與狀態監控

  1. LOAD 階段: 數據頁直寫表空間,建立索引鍵
  2. BUILD 階段: 索引構建 (可並行 INDEXING MODE INCREMENTAL/DEFERRED)
  3. DELETE 階段: 刪除違反唯一約束的重複行 (置於例外表)
  4. INDEX COPY 階段: 如 COPY YES 將索引頁寫入備份鏡像

狀態查詢: db2 "LOAD QUERY TABLE EMPLOYEE" 顯示當前階段、已處理行數、錯誤計數。

異構遷移最佳實踐:EXPORT + LOAD 組合拳

# 源庫 (Oracle/SQL Server/MySQL) → 中間文件 (DEL/IXF) → 目標庫 (DB2)
# 1. 源庫導出標準 CSV (UTF-8, 帶表頭可選)
# 2. DB2 端預建表結構 (db2look -e -t TABLE -o ddl.sql)
# 3. 大表用 LOAD NONRECOVERABLE + 事後全備
# 4. 小表用 IMPORT INSERT_UPDATE 支持增量同步
# 5. 全量對比:db2 "SELECT COUNT(*) FROM TABLE" vs 源庫行數

常見錯誤與對策

錯誤現象原因解決
SQL3110N 行數不匹配文件列數與目標表不一致檢查 MODIFIED BY 定界符、隱藏列 (XML/生成列) 是否需 METHOD P(1,2,3) 指定
SQL3519N 代碼頁轉換失敗文件編碼與 DB2 CODEPAGE 不符指定 CODEPAGE=1208 (UTF-8) 或轉碼工具預處理
LOAD 後表處於 SET INTEGRITY PENDING約束延後檢查SET INTEGRITY FOR TABLE IMMEDIATE CHECKED 執行檢查
NONRECOVERABLE 導致表不可用未做事後備份裝載緊接 BACKUP DB ... TABLESPACE ...

結語

DB2 數據移動「輕量用 EXPORT/IMPORT,重量用 LOAD」。掌握 DEL/ASC 格式規範、MODIFIED BY 參數組合、LOAD 多階段特性,即可應對從 KB 到 PB 級的各類數據遷移、裝載、歸檔場景。建議建立參數化腳本庫,納入自動化部署流水線。

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