簡述sqlldr的使用

2021-07-10 16:17:26 字數 3908 閱讀 4421

我的專案有一張表,始終是手動匯入資料。我接手之前的同事總是喜歡用pl/sql developer,但是我覺得還是黑框框看著有技術含量。

這裡順便就寫一下有關sqlldr的簡單用法。

有關sqlldr資料比較全面的應該就是幫助了,打出來看一下。

sql*loader: release 11.2.0.1.0 - productionon星期六 8月 4 12:54:31 2012

用法: 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'的位置正確。

好在我是中文版的oracle,看起來很明了。我的目的是把文字檔案匯入到資料庫中,因此我只需要幾個很簡單的引數。下面是我的資料檔案的格式:

xa0010011,88721,201207

xa0010012,88722,201207

......

下面是我的資料表的結構:

create table sqlldr_test

(user_no varchar2(100),

user_rate number,

month_id varchar2(6)

)。那麼,sqlldr的控制檔案應該這樣寫:

load data

infile

'e:\script\data.txt

'into table sqlldr_test

fields terminated by ',

'trailing nullcols

( user_no,

user_rate,

month_id

)

我的文字檔案中,資料是用逗號「,」分割的,所以這裡寫上了,這句一定要寫。

trailing nullcols,代表表的字段沒有值時,允許為空。

到此為止,控制檔案的寫作就算完成了,已經可以滿足我的應用了。

接下來就要用了。不管是在linux裡,還是windows裡,都是用命令列來控制的,當然了也可以寫乙個程式控制,但是我不會。命令列的命令如下:

sqlldr wings/wings@obama control=control.ctl log=log.log bad=bad.log errors=5000 rows=500
這裡面的所有引數在文章最開始的地方已經解釋過了,這裡便不再贅述。下面點一下回車就執行了。

我覺得需要說的應該就是rows了,因為從最開始接觸oracle就有人告訴我,每次插入資料的時候,最好每多少多少行提交一次,因為undo空間是有限的。至於每次使用sqlldr的時候多少行提交一次,我想應該根據自己的檔案大小決定。

記得記日誌,不然錯了你都不知道錯到**了。

sqlldr命令的使用

sqlldr是在cmd下執行的oracle命令,作用是將資料檔案匯入到oracle資料庫中.命令格式 sqlldr username password sid control 檔案路徑 xx.ctl xx.ctl內容 load data infile d ldr diaodubu2.csv 要匯入到...

SQLLDR的使用方法

jerry,26,200201012359 jerry,26,200201012359 控制檔案中infile選項跟sqlldr命令列中data選項含義相同,如使用infile 則表明資料在本控制檔案以begin data開頭的區域內。這樣命令變成 sqlldr dbuser dbpwd sid c...

使用SQLLDR匯入資料

這篇筆記是學習 三思筆記之一步一步學oracle 時做的例子,只是看書,不自己動作做一下,覺得很簡單,但是實際操作一下問題就多多了,先說一下我使用的環境,使用的作業系統是winxp,oracle10.2安裝在vm下的rhe5中,由於winxp和linux換行符的不同,讓我鬱悶了一晚上,第二天早上起來...