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

Oracle SQL*Loader 高效導入百萬級數據實戰指南:控制文件、數據格式與常見錯誤處理

     編輯:Oracle 資料庫基礎

什麼是 SQL*Loader

SQL*Loader(簡稱 sqlldr)是 Oracle 提供的高性能數據加載工具,適用於百萬級甚至億級數據的快速導入。只要安裝了 Oracle Client,即可在命令行執行 sqlldr。

核心組件

1. 控制文件(.ctl)

定義數據源、目標表、字段映射、格式轉換等規則。示例:

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。

2. 數據文件(.txt/.csv)

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

3. 執行命令

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 大批量數據遷移與初始化任務。

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