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

Oracle SQL*Loader (sqlldr) 實戰指南:從建表到資料載入完整流程

     編輯:關於SqlServer

SQL*Loader 是 Oracle 高效能大量載入工具,支援固定寬度、分隔符、資料轉換、多表載入等進階功能。

完整實戰流程

1. 建立目標表

CREATE TABLE TEST (
    HEAD_ID     NUMBER(6)    NOT NULL,
    HEAD        VARCHAR2(20) NOT NULL,
    AREA_CODE   VARCHAR2(9)  NOT NULL,
    HEAD_LENGTH NUMBER(2),
    COMMENTS    VARCHAR2(60)
);

2. 準備資料檔 (result.txt)

1,021,021,3,上海
2,025,025,3,南京
3,0410,410,4,鐵嶺
4,0512,512,4,蘇州
5,139159,025,7,南京
6,123456789,025,9,test

3. 撰寫控制檔 (result.ctl)

LOAD DATA
INFILE 'result.txt'
APPEND INTO TABLE TEST
FIELDS TERMINATED BY ','
(
    HEAD_ID     CHAR(6),
    HEAD        CHAR(20),
    AREA_CODE   CHAR(9),
    HEAD_LENGTH CHAR(2),
    COMMENTS    CHAR(60)
)

4. 建立批次檔 (load_data.bat)

sqlldr userid=username/password@SID control=result.ctl log=result.log
pause

5. 執行與驗證

  • 將上述 4 個檔案放同一目錄
  • 雙擊 load_data.bat
  • 查看 result.log 確認 Rows successfully loaded
  • 資料庫查詢 SELECT * FROM TEST 驗證

關鍵參數詳解

參數說明範例
INFILE資料檔路徑,支援多檔 INFILE 'a.dat' INFILE 'b.dat'INFILE 'data.csv'
APPEND / INSERT / REPLACE / TRUNCATE載入模式:追加/需空表/清空再載入/截斷表APPEND
FIELDS TERMINATED BY欄位分隔符',' '\t' '|'
TRAILING NULLCOLS欄位缺失視為 NULL適用不定欄位資料
BADFILE / DISCARDFILE錯誤/捨棄記錄輸出檔BADFILE 'load.bad'
DIRECT=TRUE直接路徑載入,繞過 SQL 層,極速大量資料首選,但有限制
PARALLEL=TRUE並行直接載入,配合分區表TB 級載入

進階控制檔技巧

' 日期轉換
HIRE_DATE DATE "YYYY-MM-DD HH24:MI:SS"

' 條件載入
INTO TABLE EMP WHEN DEPTNO = 10
INTO TABLE EMP WHEN DEPTNO = 20

' 序列/函數賦值
EMPNO SEQUENCE(MAX,1)
CREATED SYSDATE

' LOBFILE 載入大物件
RESUME LOBFILE(RESUME_CLOB) TERMINATED BY EOF

效能調優清單

  1. 使用 DIRECT=TRUE (直接路徑)
  2. 停用索引/條件約束/觸發器 → 載入完成重建
  3. 調大 READSIZE/BINDSIZE (如 10MB+)
  4. 配合 PARALLEL=TRUE + 分區表
  5. 預先分配表空間足夠空間,避免自動擴展
  6. UNRECOVERABLE (無日誌) → 載入後必須立即備份

常見錯誤排查

錯誤原因對策
ORA-01722 invalid number資料型別不符 (如字串寫入數字欄)控制檔加 TO_NUMBER 或清洗資料
Record rejected - all columns null分隔符錯誤導致整列解析失敗檢查 FIELDS TERMINATED BY、資料檔編碼
ORA-01652 unable to extend temp segment暫存表空間不足擴充 TEMP、或分批載入
Log shows "0 Rows successfully loaded"控制檔欄位映射錯誤 / 檔案編碼不符用 sqlldr ... control=test.ctl 單步測試

SQL*Loader 是 Oracle DBA 必備技能,掌握控制檔語法與直接路徑載入,能從容應對 TB 級資料遷移與日常 ETL。

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