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

Oracle 文本數據導入三大方案與 SQL*Loader 實戰詳解

     編輯:Oracle 資料庫基礎

三大主流導入路徑對比

方案適用場景優勢局限
SQL*Loader (sqlldr)大批量、高性能、自動化腳本速度最快、功能最全、支援直接路徑載入需編寫控制文件、學習曲線較陡
其他資料庫遷移工具異構遷移、一次性專案圖形化、字段映射直觀性能較差、大數據量易超時
Enterprise Manager 數據載入少量數據、臨時任務、DBA 偏好 GUI無需命令行、向導式操作不適合自動化、大文件效率低

SQL*Loader 核心實戰流程

前置條件

  1. 目標表結構已在資料庫建立;
  2. 準備數據源文件(如 Tab 分隔的 model.txt,從 Excel 導出);
  3. 編寫控制文件 input.ctl;
  4. 確保 Listener 服務已啟動(sqlplus user/pwd@service 測試連通)。

控制文件範例 (input.ctl)

LOAD DATA
INFILE 'model.txt'
INTO TABLE target_table
FIELDS TERMINATED BY '\t'  -- Tab 分隔
TRAILING NULLCOLS
(
    col1  CHAR(20),
    col2  DATE "YYYY-MM-DD",
    col3  NUMBER(10,2),
    col4  CHAR(100)
)

命令行執行

sqlldr userid=user/pwd@service control=input.ctl log=input.log bad=input.bad discard=input.dsc
  • log:詳細執行日誌;
  • bad:格式錯誤記錄;
  • discard:不符合 WHEN 條件的記錄。

進階優化技巧

  1. 直接路徑載入:控制文件添加 DIRECT=TRUE,繞過 SQL 引擎直寫數據塊,速度提升 5-10 倍;
  2. 並行載入:大文件拆分多份,多會話並行 sqlldr ... PARALLEL=TRUE;
  3. 無索引載入後重建:載入前 DROP INDEX,載入後 CREATE INDEX,避免索引維護開銷;
  4. 大提交頻率:ROWS=10000 減少提交開銷;
  5. 日期格式顯式聲明:避免 NLS 環境差異導致解析失敗。

常見錯誤排查

  • ORA-01652:臨時表空間不足 → 擴容 TEMP 表空間;
  • SQL*Loader-500:控制文件語法錯誤 → 檢查字段映射、分隔符、引號;
  • 字符集亂碼:確保 NLS_LANG 與源文件編碼一致(如 ZHS16GBK)。

總結

SQL*Loader 是 Oracle 大批量數據導入的「黃金標準」。掌握控制文件編寫、直接路徑、並行載入、索引策略四大核心技術,配合自動化腳本與監控告警,可構建企業級高可靠、高性能的數據攝入管線。

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