日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用sqlldr导入文本数据到oracle

發布時間:2025/3/11 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用sqlldr导入文本数据到oracle 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.sqlldr介紹

用法: SQLLDR keyword=value [,keyword=value,...] ? 有效的關鍵字: ? ????userid -- ORACLE 用戶名/口令??????? ???control -- 控制文件名??????????????? ???????log -- 日志文件名??????????????????? ???????bad -- 錯誤文件名?????????????????? ??????data -- 數據文件名????????????????? ???discard -- 廢棄文件名 discardmax -- 允許廢棄的文件的數目???????? (全部默認) ??????skip -- 要跳過的邏輯記錄的數目? (默認 0) ??????load -- 要加載的邏輯記錄的數目? (全部默認) ????errors -- 允許的錯誤的數目???????? (默認 50) ??????rows -- 常規路徑綁定數組中或直接路徑保存數據間的行數 ???????????????(默認: 常規路徑 64, 所有直接路徑) ??bindsize -- 常規路徑綁定數組的大小 (以字節計)? (默認 256000) ????silent -- 運行過程中隱藏消息 (標題,反饋,錯誤,廢棄,分區) ????direct -- 使用直接路徑???????????????????? (默認 FALSE) ???parfile -- 參數文件: 包含參數說明的文件的名稱 ??parallel -- 執行并行加載??????????????????? (默認 FALSE) ??????file -- 要從以下對象中分配區的文件???? skip_unusable_indexes -- 不允許/允許使用無用的索引或索引分區? (默認 FALSE) skip_index_maintenance -- 沒有維護索引, 將受到影響的索引標記為無用? (默認 FALSE) commit_discontinued -- 提交加載中斷時已加載的行? (默認 FALSE) ??readsize -- 讀取緩沖區的大小?????????????? (默認 1048576) external_table -- 使用外部表進行加載; NOT_USED, GENERATE_ONLY, EXECUTE? (默認 NOT_USED) columnarrayrows -- 直接路徑列數組的行數? (默認 5000) streamsize -- 直接路徑流緩沖區的大小 (以字節計)? (默認 256000) multithreading -- 在直接路徑中使用多線程 ?resumable -- 啟用或禁用當前的可恢復會話? (默認 FALSE) resumable_name -- 有助于標識可恢復語句的文本字符串 resumable_timeout -- RESUMABLE 的等待時間 (以秒計)? (默認 7200) date_cache -- 日期轉換高速緩存的大小 (以條目計)? (默認 1000) no_index_errors -- 出現任何索引錯誤時中止加載? (默認 FALSE) ? PLEASE NOTE: 命令行參數可以由位置或關鍵字指定 。前者的例子是 'sqlldr scott/tiger foo'; 后一種情況的一個示例是 'sqlldr control=foo userid=scott/tiger'。位置指定參數的時間必須早于 但不可遲于由關鍵字指定的參數。例如, 允許'sqlldr scott/tiger control=foo logfile=log', 但是 不允許'sqlldr scott/tiger control=foo log', 即使 參數'log'?的位置正確。

2.實戰

先有需求:

將000000_0.txt文件導入oracle數據庫

000000_0.txt大小:123MB,幾十萬行

000000_0.txt內容格式:

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


導入的數據庫表結構:


create table TEST201605 (SHI_JIAN,ZDCS,ZDFL,ZDXH,XQWLLX,XQWYBH,LAC,CI,IMEI,IMSI,THREEG_LL,THREEG_SZ,FOURG_LL )


2.1編寫控制文件 load.ctl:

load data
CHARACTERSET UTF8 ?//查看下文件的編碼,設為同一個編碼
infile "E:\datafile\000000_0.txt" ? //只能一個個導入,可以把多個文件合并到一個里,然后導入
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用戶下執行:


sqlldr daily/mdasil control=/datafile-import/ctl/44.ctl log=/datafile-import/log/log20160526.log ?bad=/datafile-import/log/bad20160526.log


rows與bindsize相關,rows默認64行,如果不修改bindsize,只修改rows無效。

bindsize --( 每次提交記錄的緩沖區的大小,字節為單位,默認256000)


dos窗口會打印:

達到提交點 - 邏輯記錄計數 441884
達到提交點 - 邏輯記錄計數 441954
達到提交點 - 邏輯記錄計數 442024
達到提交點 - 邏輯記錄計數 442094


sqllder 導入的時候,不支持中文列名,因為文件里的都是string,導入的表字段也要 字符串 類型 。

(可以控制類型,但是如果數據內容格式不對,導入出錯就比較麻煩,還是以string文本導入后,再修改表結構)


總結

以上是生活随笔為你收集整理的使用sqlldr导入文本数据到oracle的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。