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

Oracle SQL*Loader 大量測試資料快速產生與載入實戰

     編輯:Oracle 資料庫基礎

三步驟產生千萬筆測試資料

1. PL/SQL Developer 匯出基礎 CSV

SELECT object_id, object_name FROM dba_objects;
-- 右鍵匯出 → 1.csv (約 5 萬筆)

2. Linux Shell 迴圈擴充至 1000 萬筆

#!/bin/bash
for ((i=1; i<=200; i++)); do
  cat 1.csv >> 2.csv
  echo $i
done
# 50000 * 200 = 10,000,000 筆
wc -l 2.csv  # 確認筆數

3. SQL*Loader 控制檔與執行

-- 1.ctl
LOAD DATA
INFILE '2.csv'
INTO TABLE my_objects
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(object_id, object_name)
sqlldr userid=scott/tiger control=1.ctl log=1.log direct=true

關鍵控制檔參數說明

選項說明
INFILE '*'資料在控制檔 BEGINDATA 之後
BADFILE錯誤記錄檔
APPEND / INSERT / REPLACE / TRUNCATE載入模式:追加/空表/覆蓋/截斷
POSITION(m:n)固定寬度欄位位置
TERMINATED BY分隔符號
DIRECT=TRUE直接路徑載入,繞過 SQL 層,極快
PARALLEL=TRUE多進程並行載入 (需分區表/多檔案)
UNRECOVERABLE搭配 DIRECT=TRUE,不產生 REDO,極大幅提速

實測效能 (VM 環境:1 核 2.8GHz, 1GB RAM)

  • 200 萬筆 / 79 MB → 30 秒
  • 1100 萬筆 / 392 MB → 226 秒

大規模載入優化清單

  1. 目標表設 NOLOGGING + 控制檔 UNRECOVERABLE + DIRECT=TRUE。
  2. 預先建立分區表,配合 PARALLEL=TRUE 多檔案並行載入。
  3. 先用小檔案驗證控制檔正確,再切換大檔案。
  4. 關閉不必要的索引/約束,載入完成後重建。
  5. 調整 READSIZE, BINDSIZE, ROWS 參數 (命令列) 優化記憶體緩衝。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved