SQL*Loader(簡稱 sqlldr)是 Oracle 提供的高性能數據加載工具,適用於百萬級甚至億級數據的快速導入。只要安裝了 Oracle Client,即可在命令行執行 sqlldr。
定義數據源、目標表、字段映射、格式轉換等規則。示例:
LOAD DATA
INFILE 'f:\TL_FUND_MMS_BATCH.txt'
BADFILE 'f:\BAD_TL_FUND_MMS_BATCH1.dat'
APPEND
INTO TABLE tl_fund_mms_batch
FIELDS TERMINATED BY ","
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
NUMBATCHSEQID,
VC2BATCHNAME,
VC2RESOURCEID,
NUMCOUNTTOTAL,
NUMCOUNTSUCS,
NUMCOUNTLONG,
NUMCOUNTFAILD,
VC2BILLPATH,
NUMCREATEUSERID,
NUMSENDUSERID,
NUMDEALFLAG,
DATCREATETIME DATE "YYYY-MM-DD HH24:MI:SS",
DATSENDTIME DATE "YYYY-MM-DD HH24:MI:SS"
)
APPEND:保留現有數據追加導入。OPTIONALLY ENCLOSED BY '"'":自動去除字段外層雙引號。TRAILING NULLCOLS:末尾缺失字段視為 NULL。DATE "format" 直接轉換,等同 TO_DATE。103,"肖測試","0111022109240241310006",1,1,0,0,"../webaPPS/billFiles\data(2).XML",900000,900000,2,2011-4-28 15:50:26,2011-4-28 15:50:26
sqlldr userid/password@tns control=f:\control.ctl log=f:\log.log
執行後生成 log.log 與 BAD_TL_FUND_MMS_BATCH1.dat(壞數據文件)。日誌關鍵信息:
ORA-00001: unique constraint violated:主鍵衝突,導入記錄被拒絕。達到提交點 - 邏輯記錄計數 1:不代表成功,需檢查「Rows successfully loaded」與「Rows not loaded due to data errors」。控制文件指定 DATE "YYYY-MM-DD HH24:MI:SS" 時,數據文件日期不能帶雙引號(如 2011-4-28 15:50:26),否則會報錯。
數據文件字段為 "肖測試" 時,控制文件必須加 OPTIONALLY ENCLOSED BY '"'",否則導入庫中會保留雙引號。
大批量導入前建議先關閉索引/約束,導入完成後重建,或使用 SKIP_INDEX_MAINTENANCE 參數(直接路徑加載)。
掌握控制文件語法、日期與字符轉義規則、日誌解讀技巧,即可高效、穩健地完成 Oracle 大批量數據遷移與初始化任務。