測試oracle sqlldr

maneryan發表於2014-12-03
1.建立一個簡單的文字檔案,比如:testLoad.txt或者testLoad.csv,內容如下:
1,test,33
2,test,33
3,test,33
4,test,33
5,test,33
6,test,33
7,test,33
8,test,33
9,test,33
10,test,33
2.在資料庫中建立一個表,比如:
create table test141203(
id number(5),
name varchar2(20),
age number(3),
constraint pk_id primary key(id));
3.建立一個簡單的控制檔案,比如:test.ctl,內容如下:
load data--控制檔案標識  
infile 'e:\testload.txt'--要輸入的資料檔名  
append
into table test141203
fields terminated by ','--指定分割符,終止欄位值 
(id,name,age)
/*a、insert,為預設方式,在資料裝載開始時要求表為空
  b、append,在表中追加新記錄
  c、replace,刪除舊記錄,替換成新裝載的記錄
  d、truncate,同上*/
4.開啟cmd命令列工具,輸入如下命令
sqlldr ipmsdp/ipmsdp$1234@inas_10.217.2.19 control='e:\test.ctl' data='e:\testload.txt'
/*若需要執行日誌 則後增加log='e:\log.log'*/
5.注意
 a.完成後即可在資料庫表中查到資料,若txt中將id=10的記錄改成1,由於id未主鍵,最後一條記錄不會插入到表中,而會在e盤下產生檔案testload.bad,並在裡邊    記錄未載入的資料;
b.win7下控制皮膚-資料夾選項--取消"隱藏已知檔案型別的副檔名"前的對號,然後點確定 即可顯示出來檔案字尾名 便於增加ctl檔案;
 c.oracle自己帶了很多的工具可以用來進行資料的遷移、備份和恢復等工作。但是每個工具都有自己的特點。
  比如說exp和imp可以對資料庫中的資料進行匯出和匯出的工作,是一種很好的資料庫備份和恢復的工具,因此主要用在資料庫的熱備份和恢復方面。有著   速度快,使用簡單,快捷的優點;同時也有一些缺點,比如在不同版本資料庫之間的匯出、匯入的過程之中,總會出現這樣或者那樣的問題,這個也許是   oracle公司自己產品的相容性的問題吧。
  sql loader 工具卻沒有這方面的問題,它可以把一些以文字格式存放的資料順利的匯入到oracle資料庫中,是一種在不同資料庫之間進行資料遷移的非   常方便而且通用的工具。缺點就速度比較慢,另外對blob等型別的資料就有點麻煩了.
6. sqlldr用到的主要引數
1)   userid -- ORACLE username/password   --資料庫 使用者名稱/密碼
2)control –控制檔案
3)   log –記錄的日誌檔案
4)   bad –壞資料檔案,記錄錯誤的未載入資料
5)   data –資料檔案,* data引數只能指定一個資料檔案,如果控制檔案也透過infile指定了資料檔案,並且指定多個,則sqlldr在執行時,先載入data引數指定的資料檔案,控制檔案中第一個infile指定的資料檔案被忽略,但後續的infile指定的資料檔案繼續有效
 
6)   discard –丟棄的資料檔案
7)   discardmax –允許丟棄資料的最大值        (預設全部)
8)   skip --跳過記錄數,從資料檔案中,從第一行開始要計算要跳過的行數 (預設0)
9)   load -- Number of logical records to load  (預設全部)
10) errors –允許的錯誤記錄數,超過則終止任務(預設50)
11) rows -- Number of rows in conventional path bind array or between direct path data saves(每次提交的記錄數,預設:常規路徑64,直接路徑全部,所以使用直接路徑的話,效率會比普通的好太多太多)
 
12) bindsize -- Size of conventional path bind array in bytes(每次提交記錄的緩衝區的大小,位元組為單位,預設256000)
13) silent --禁止輸出資訊(header,feedback,errors,discards,partitions)
14) direct –使用直通路徑方式匯入(預設FALSE)
如果表中有索引的話,是不能指定direct=TRUE的,除非使用skip_index_maintenance=TRUE,這個就是在匯入的時候忽略索引,所以在資料匯入完畢以後,檢視索引的狀態應該都是無效的,需要重建之,如下SQL:select  * from dba_indexes where table_name='?' ;
alter  idnex index_name rebuild ;
 
重新建立索引要比新建索引快。
15) parallel --並行匯入 (預設FALSE,注意:parallel並不是讓一個sqlldr語句起多個程式來載入資料,而是不鎖住載入表,允許別的直接路徑載入.所以要使parallel起作用,應該先將要載入的資料檔案分成多個,用多個sqlldr語句同時載入,如下例:
  sqlldr userid=scott/tiger control=load1.ctl data=data1.txt direct=y parallel=true & sqlldr userid=scott/tiger control=load2.ctl data=data2.txt direct=y parallel=true & sqlldr userid=scott/tiger control=load3.ctl data=data3.txt direct=y parallel=true &)



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26344835/viewspace-1354917/,如需轉載,請註明出處,否則將追究法律責任。

相關文章