我的專案有一張表,始終是手動匯入資料。我接手之前的同事總是喜歡用pl/sql developer,但是我覺得還是黑框框看著有技術含量。
這裡順便就寫一下有關sqlldr的簡單用法。
有關sqlldr資料比較全面的應該就是幫助了,打出來看一下。
sql*loader: release 11.2.0.1.0 - production
on
星期六 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換行符的不同,讓我鬱悶了一晚上,第二天早上起來...