大型系統開發常面臨平面文件(Flat File)入庫需求。資料庫強大的集合運算、索引、並發控制遠勝文件 I/O。本文針對 Oracle 環境(他庫同理),比較三種主流導入路徑:SQL*Loader 原生工具、Informatica 企業級 ETL、Access 過渡方案。
Oracle Client 附帶,核心兩件事:控制檔描述解析規則 + 數據檔提供內容。
LOAD DATA
INFILE '/ora9i/fengjie/agent/data/ipaagentdetail200410.txt'
TRUNCATE INTO TABLE fj_ipa_agentdetail
FIELDS TERMINATED BY ","
TRAILING NULLCOLS
( AGENT_NO CHAR,
AGENT_NAME CHAR,
AGENT_ADDRESS CHAR,
AGENT_LINKNUM CHAR,
AGENT_LINKMAN CHAR )
INFILE:數據檔完整路徑(也可命令列傳入)。TRUNCATE:載入前清空表(APPEND 為追加)。FIELDS TERMINATED BY:分隔符格式(CSV、Tab 等)。TRAILING NULLCOLS:缺欄位視為 NULL 而不報錯。數據樣本:602530005922 1012(設備號 20 碼 + 區局號 5 碼)
LOAD DATA
INFILE '/ora9i/fengjie/agent/data/ipaagent200410.txt'
TRUNCATE INTO TABLE fj_ipa_agent
( DEVNO POSITION(1:20) CHAR,
BRANCH_NO POSITION(21:25) CHAR )
POSITION(m:n) 指定字元位置範圍(從 1 起算)。
sqlldr userid=scott/tiger control=loader.ctl log=loader.log bad=loader.bad discard=loader.dsc
bad 檔:格式不符被拋棄的行。discard 檔:不滿足 WHEN 條件的行。DIRECT=TRUE 直寫數據塊,繞過 SQL 層,大幅提速。適用:多源異構、複雜轉換、大數據量、調度監控、血緣分析。
優勢:圖形化開發、版本控制、元數據管理、集群負載均衡、推送下推優化(Pushdown Optimization)將邏輯下推資料庫執行。
缺點:雙重導入、Access 2GB 限制、Jet Engine 效能弱、不支援並發大批次。優勢:無需額外授權、非技術人員可操作、離線環境可用。
| 場景 | 推薦方案 | 理由 |
|---|---|---|
| 單一來源、固定格式、定時批次、<500萬行 | SQL*Loader (+ Shell 排程) | 零成本、極速、維護簡單 |
| 多源聯接、複雜清洗、CDC、審計追蹤 | Informatica / Data Integrator | 元數據驅動、企業級治理 |
| 一次性遷移、用戶自助、無開發資源 | Access / Excel Power Query | 門檻最低、即時可見結果 |
| 雲原生、Serverless、流式微批次 | Oracle Cloud Data Integration / Kafka Connect | 托管、彈性擴縮 |
DISABLE CONSTRAINTS、UNUSABLE INDEXES,載入後 REBUILD + ENABLE。DIRECT=TRUE + PARALLEL(Enterprise Edition)。BAD/DISCARD 檔自動巡檢機制,異常即時告警。「平面文件入庫」看似基礎,實則關係數據質量第一關。SQL*Loader 是利刃,Informatica 是軍團,Access 是拐杖。按數據量、複雜度、治理要求選對工具,並建立標準化、可監控、可重試的導入管線,才是長久之計。