OCIULDR 是一款由 Lou Fangxin 開發的 Oracle 高性能數據卸載工具,專為大批量數據導出設計。相較於傳統的 SQL*Plus SPOOL 方式,OCIULDR 具備極快的導出速度,能在秒級完成十萬條記錄的導出,是 DBA 和開發人員處理大數據遷移的利器。
將 ociuldr.exe 複製到 Oracle Client 的 BIN 目錄(如 H:\oracle\product\10.2.0\db_1\BIN),或放置在系統 PATH 環境變量包含的任意目錄中即可直接調用。
執行 ociuldr 可查看完整參數列表,關鍵參數如下:
username/password@tnsname0x2c (逗號)0x0a (換行) 等uldrdata.txtd:\>ociuldr user=test/test@acf query="select * from test" file=test.txt table=test
導出結果為純文本,字段以逗號分隔,記錄以換行分隔:
1,a
2,b
3,c
4,d
5,e
6,f
工具同步生成 test_sqlldr.ctl 控制文件,內容包含:
-- Generated by OCIULDR
OPTIONS(BINDSIZE=8388608,READSIZE=8388608,ERRORS=-1,ROWS=50000)
LOAD DATA
INFILE 'test.txt' "STR X'0a'"
INTO TABLE test
FIELDS TERMINATED BY X'2c' TRAILING NULLCOLS
(
ID CHAR(40),
NAME CHAR(10)
)
d:\>sqlldr test/test@acf control=test_sqlldr.ctl
即可將導出數據高效載入目標數據庫。
當表數據量極大時,可啟用 batch 參數實現分文件導出:
D:\>ociuldr user=test/test@acf query="select * from test" batch=1 file=test_%d.txt table=test
batch=1:每 50 萬行生成一個文件file=test_%d.txt:%d 會自動替換為序號(test_1.txt, test_2.txt...)batch=0 表示不分文件實測表明:使用 SPOOL 導出 10 萬條記錄需數分鐘,而 OCIULDR 僅需 1 秒左右。其核心優勢在於:
array 參數)減少網絡往返read/sort/hash)最大化 I/O 效率| 字符 | 十六進制 |
|---|---|
| 換行符 \n | 0x0a |
| 回車符 \r | 0x0d |
| 製表符 \t | 0x09 |
| 逗號 , | 0x2c |
| 豎線 | | 0x7c |