使用sqlldr导入文本数据到oracle
1.sqlldr介紹
用法: SQLLDR keyword=value [,keyword=value,...] ? 有效的關(guān)鍵字: ? ????userid -- ORACLE 用戶名/口令??????? ???control -- 控制文件名??????????????? ???????log -- 日志文件名??????????????????? ???????bad -- 錯誤文件名?????????????????? ??????data -- 數(shù)據(jù)文件名????????????????? ???discard -- 廢棄文件名 discardmax -- 允許廢棄的文件的數(shù)目???????? (全部默認(rèn)) ??????skip -- 要跳過的邏輯記錄的數(shù)目? (默認(rèn) 0) ??????load -- 要加載的邏輯記錄的數(shù)目? (全部默認(rèn)) ????errors -- 允許的錯誤的數(shù)目???????? (默認(rèn) 50) ??????rows -- 常規(guī)路徑綁定數(shù)組中或直接路徑保存數(shù)據(jù)間的行數(shù) ???????????????(默認(rèn): 常規(guī)路徑 64, 所有直接路徑) ??bindsize -- 常規(guī)路徑綁定數(shù)組的大小 (以字節(jié)計)? (默認(rèn) 256000) ????silent -- 運行過程中隱藏消息 (標(biāo)題,反饋,錯誤,廢棄,分區(qū)) ????direct -- 使用直接路徑???????????????????? (默認(rèn) FALSE) ???parfile -- 參數(shù)文件: 包含參數(shù)說明的文件的名稱 ??parallel -- 執(zhí)行并行加載??????????????????? (默認(rèn) FALSE) ??????file -- 要從以下對象中分配區(qū)的文件???? skip_unusable_indexes -- 不允許/允許使用無用的索引或索引分區(qū)? (默認(rèn) FALSE) skip_index_maintenance -- 沒有維護索引, 將受到影響的索引標(biāo)記為無用? (默認(rèn) FALSE) commit_discontinued -- 提交加載中斷時已加載的行? (默認(rèn) FALSE) ??readsize -- 讀取緩沖區(qū)的大小?????????????? (默認(rèn) 1048576) external_table -- 使用外部表進行加載; NOT_USED, GENERATE_ONLY, EXECUTE? (默認(rèn) NOT_USED) columnarrayrows -- 直接路徑列數(shù)組的行數(shù)? (默認(rèn) 5000) streamsize -- 直接路徑流緩沖區(qū)的大小 (以字節(jié)計)? (默認(rèn) 256000) multithreading -- 在直接路徑中使用多線程 ?resumable -- 啟用或禁用當(dāng)前的可恢復(fù)會話? (默認(rèn) FALSE) resumable_name -- 有助于標(biāo)識可恢復(fù)語句的文本字符串 resumable_timeout -- RESUMABLE 的等待時間 (以秒計)? (默認(rèn) 7200) date_cache -- 日期轉(zhuǎn)換高速緩存的大小 (以條目計)? (默認(rèn) 1000) no_index_errors -- 出現(xiàn)任何索引錯誤時中止加載? (默認(rèn) FALSE) ? PLEASE NOTE: 命令行參數(shù)可以由位置或關(guān)鍵字指定 。前者的例子是 'sqlldr scott/tiger foo'; 后一種情況的一個示例是 'sqlldr control=foo userid=scott/tiger'。位置指定參數(shù)的時間必須早于 但不可遲于由關(guān)鍵字指定的參數(shù)。例如, 允許'sqlldr scott/tiger control=foo logfile=log', 但是 不允許'sqlldr scott/tiger control=foo log', 即使 參數(shù)'log'?的位置正確。
2.實戰(zhàn)
先有需求:
將000000_0.txt文件導(dǎo)入oracle數(shù)據(jù)庫
000000_0.txt大小:123MB,幾十萬行
000000_0.txt內(nèi)容格式:
20160514|未知|未知|未知|3G|057431041116|55349|41116|28173301261774|460007863660008|1.224609375|13.0|\N|\N
20160514|HTC|手機|D728w|3G|057431001157|55097|1157|35153907023514|460006620667069|0.513671875|10.0|\N|\N
20160514|HTC|手機|D728w|3G|057431043861|55084|43861|35153907033487|460027685036740|2937.208984375|8052.0|\N|\N
20160514|HTC|手機|D728w|3G|057431003011|55084|3011|35153907033487|460027685036740|1.755859375|56.0|\N|\N
導(dǎo)入的數(shù)據(jù)庫表結(jié)構(gòu):
2.1編寫控制文件 load.ctl:
load data
CHARACTERSET UTF8 ?//查看下文件的編碼,設(shè)為同一個編碼
infile "E:\datafile\000000_0.txt" ? //只能一個個導(dǎo)入,可以把多個文件合并到一個里,然后導(dǎo)入
append
into table TEST201605
fields terminated by '|'
trailing nullcols
(
? ? --"時間",
? ? SHI_JIAN,
? ? ZDCS,
? ? ZDFL,
? ? ZDXH,
? ? XQWLLX,
? ? XQWYBH,
? ? LAC,
? ? CI,
? ? IMEI,
? ? IMSI,
? ? THREEG_LL,
? ? THREEG_SZ,
? ? FOURG_LL
)
2.2 windows下
dos命令窗,cd 到load.ctl所在目錄
使用命令:
sqlldr daily/mdasil@daily-74 control=load.ctl log=log.log bad=bad.log errors=5000 rows=1000 bindsize=10485760
linux:
load data
CHARACTERSET UTF8
infile "/datafile-import/000021_0.txt"
append
into table jingfen_201605_1415
fields terminated by '|'
trailing nullcols
(
? ? SHI_JIAN,
? ? ZDCS,
? ? ZDFL,
? ? ZDXH,
? ? XQWLLX,
? ? XQWYBH,
? ? LAC,
? ? CI,
? ? IMEI,
? ? IMSI,
? ? THREEG_LL,
? ? THREEG_SZ,
? ? FOURG_LL
)
oracle用戶下執(zhí)行:
sqlldr daily/mdasil control=/datafile-import/ctl/44.ctl log=/datafile-import/log/log20160526.log ?bad=/datafile-import/log/bad20160526.log
rows與bindsize相關(guān),rows默認(rèn)64行,如果不修改bindsize,只修改rows無效。
bindsize --( 每次提交記錄的緩沖區(qū)的大小,字節(jié)為單位,默認(rèn)256000)
dos窗口會打印:
達到提交點 - 邏輯記錄計數(shù) 441884
達到提交點 - 邏輯記錄計數(shù) 441954
達到提交點 - 邏輯記錄計數(shù) 442024
達到提交點 - 邏輯記錄計數(shù) 442094
sqllder 導(dǎo)入的時候,不支持中文列名,因為文件里的都是string,導(dǎo)入的表字段也要 字符串 類型 。
(可以控制類型,但是如果數(shù)據(jù)內(nèi)容格式不對,導(dǎo)入出錯就比較麻煩,還是以string文本導(dǎo)入后,再修改表結(jié)構(gòu))
總結(jié)
以上是生活随笔為你收集整理的使用sqlldr导入文本数据到oracle的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux限制ping的时间,如何限制L
- 下一篇: mysql sleep详解_MySQL中