oracle sqlldr 總結

perfychi發表於2012-06-12

1. SQL*LOADERORACLE的資料載入工具,通常用來將作業系統檔案遷移到ORACLE資料庫中。 

2. NT下,SQL*LOADER的命令為SQLLDR,在UNIX下一般為sqlldr/sqlload(在/oracle/product/10.2.0/bin目錄下可以看到存在sqlldr

3. 用法:   sqlldr  關鍵字   =     [,keyword=value,...]

4. 當載入大量資料時,可以抑制日誌的產生:

a)     ALTER   TABLE   RESULTXT  nologging;

5. 控制檔案.ctl

load   data             --1、控制檔案標識    

infile   'test.txt'            --2、要輸入的資料檔名為test.txt    

append   into   table   test    --3、向表test中追加記錄    

fields   terminated   by   '|+|'  TRAILING NULLCOLS  --4、欄位終止於空行    

(TP_CUSTOMER_ID ,

ECIF_NO ,

 TP_SYSTEM_SOURCE_CD)     -----定義列對應順序    

      其中append為資料裝載方式,還有其他選項:    

ainsert,為預設方式,在資料裝載開始時要求表為空    

bappend,在表中追加新記錄    

creplace,刪除舊記錄(全部的記錄),替換成新裝載的記錄    

dtruncate,同上先刪除再新增

6. 範例:

a)     Unix + Oracle環境。

b)    在某目錄下準備好test.ctltest.dat檔案。

c)     執行命令: sqlldr userid=orcl /orcle@10.1.1.11:1521/orcl control=test.ctl data=test.dat log=test.log bad=test.bad;

7. 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,這個就是在匯入的時候忽略索引,所以在資料匯入完畢以後,檢視索引的狀態應該都是無效的,需要重建之,如下SQLselect  * 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 &)

16) skip_unusable_indexes -- disallow/allow unusable indexes or index partitions(預設FALSE)

17) skip_index_maintenance -- do not maintain indexes, mark affected indexes as unusable(預設FALSE)

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

相關文章