前言:資料遷移的關鍵環節——格式相容性
在 DB2 資料庫匯入外部資料前,系統會嚴格驗證檔案格式是否符合強制性規範。格式不符將導致匯入失敗。本文深度解析 DB2 支援的三種主流外部檔案格式——定界 ASCII (DEL)、非定界 ASCII (ASC)、PC/IXF,詳細說明分隔符規範、跨平台換行符陷阱、編碼處理,並提供實戰匯入範例與避坑指南,助資料庫管理員高效完成資料遷移。
一、定界 ASCII 檔案 (DEL) —— 最通用的交換格式
1.1 核心分隔符規範
| 分隔符類型 | 預設值 | 可自訂 | 說明 |
| 字串分隔符 | 雙引號 (") | 是 | 標識 CHAR/VARCHAR/GRAPHIC 等字串型欄位的起止。Oracle 不需此符號,DB2 強制要求。 |
| 欄位分隔符 | 逗號 (,) | 是 | 分隔各欄位。需為英文輸入模式符號,中文逗號會被視為普通字元。 |
| 記錄分隔符 | 換行符 | 否 | Windows: CRLF (\r\n);Linux/UNIX: LF (\n)。跨平台匯入必須轉換。 |
1.2 標準 DEL 格式範例
1001,"Office Supplies",2323,"Beijing",-233
1002,"IT Equipment",5000,"Shanghai",0
1003,"Consulting",15000,"Shenzhen",1200
1.3 實戰匯入命令
# 基本匯入
db2 "import from /data/import/product.del of del insert into schema.product"
# 指定自訂分隔符:欄位用分號,字串用單引號
db2 "import from /data/import/product.del of del modified by coldel; chardel'' insert into schema.product"
# 處理含 LOB 欄位
db2 "import from /data/import/emp.del of del lobs from /data/lobs/ modified by lobsinfile insert into schema.employee"
二、非定界 ASCII 檔案 (ASC) —— 固定寬度格式
2.1 格式特徵
- 無分隔符,每欄位由固定起始位置與長度定義
- 適合大型主機下傳、Legacy 系統交換、效能敏感的批量載入
- 數值型欄位通常右對齊補空格,字串型左對齊補空格
2.2 匯入時需指定 METHOD L 參數
# 格式:method L (起始位置 結束位置, ...)
# 範例:欄位1第1-5字元,欄位2第6-20字元,欄位3第21-25字元
db2 "import from /data/import/fixed.asc of asc method L(1 5, 6 20, 21 25) insert into schema.table"
三、PC/IXF 格式 —— 跨平台資料與結構同步
3.1 核心優勢
- 自描述性:檔案內含資料表結構定義 (DDL)、索引定義、資料類型、長度、可空性等完整中繼資料
- 支援 LOB:大物件資料可內嵌或外部檔案引用
- 跨平台相容:Windows、Linux、AIX、z/OS 間無縫遷移
- 支援 CREATE INTO:匯入時自動建立目標表結構
3.2 典型應用場景
- 異構資料庫遷移 (Oracle → DB2, SQL Server → DB2)
- 開發/測試/生產環境間資料與結構同步
- 資料歸檔與長期保存 (自帶結構定義,十年後仍可解析)
3.3 匯入實戰:自動建表並載入資料
# 從 IXF 建立新表並載入 (REPLACE_CREATE)
db2 "import from /data/migration/customer.ixf of ixf replace_create into schema.customer"
# 僅載入資料到現有表 (REPLACE 清空後載入)
db2 "import from /data/migration/customer.ixf of ixf replace into schema.customer"
# 選擇性匯入特定欄位並重新排序
db2 "import from /data/migration/customer.ixf of ixf method N(CUST_ID, CUST_NAME, REGION) insert into schema.customer"
四、跨平台匯入的三大致命陷阱與解決方案
| 陷阱 | 現象 | 根因 | 解決方案 |
| 換行符不匹配 | Linux 上檢視 Windows 產生的 DEL 檔,所有記錄擠在單行 | Windows CRLF (\r\n) vs Linux LF (\n) | dos2unix file.del 或 sed -i 's/\r$//' file.del 轉換後再匯入 |
| 字元編碼不一致 | 中文亂碼、匯入報錯 SQL3307N | 來源檔案 GBK/Big5,DB2 資料庫 UTF-8 (代碼頁 1208) | iconv -f GBK -t UTF-8 src.del > tgt.del 轉碼;或設定 db2set DB2CODEPAGE=1386 (GBK) 匹配來源 |
| 數值格式差異 | 科學記數法、負號位置、小數點符號導致匯入失敗 | 地區設定影響數值字面值表示 | 使用 modified by decpt. decplusblank 控制小數點與正號;或預處理統一格式 |
五、匯入效能優化實戰參數
# 批次提交:每 1000 筆提交一次,減少日誌 I/O
db2 "import from big.del of del commitcount 1000 insert into big_table"
# 緩衝區插入:需預先綁定套件
db2 bind db2uimpm.bnd insert buf
# 匯入前啟用
db2 "import from big.del of del insert_buf insert into big_table"
# 並行匯入 (DPF 環境):配合 db2_load API 或外部表
六、總結與格式選型建議
| 場景 | 推薦格式 | 理由 |
| 異構資料庫遷移、結構同步、長期歸檔 | PC/IXF | 自帶 DDL、跨平台、支援 LOB、可自動建表 |
| 應用系統介接、ETL 中間檔、人工編輯維護 | DEL (定界 ASCII) | 可讀性強、Excel/文本編輯器可開啟、工具支援廣泛 |
| 大型主機下傳、高效能批量載入、Legacy 系統 | ASC (非定界 ASCII) | 解析速度最快、無分隔符掃描開銷、固定寬度易驗證 |
專家建議:建立標準化的「資料匯入作業手冊」,固化格式規範、轉碼流程、驗證腳本、回滾預案。將匯入前的格式檢查 (行數、欄位數、編碼、分隔符) 自動化納入 CI/CD,從源頭杜絕格式錯誤導致的匯入失敗。