Oracle sqlldr命令


今天別人的入庫代碼,看的真有點暈,最后看完才知道是用了sqlldr命令。哎。。。還是學藝不精啊,今后還是要多努力。

總結哈sqlldr命令:雖然大多是網上來的,自己要有體會嘛 !開源就是好啊。

sqlldr是cmd下的命令,用來將文本格式數據導入到數據庫中。
命令格式:
sqlldr username/password@sid control=*.ctl

*.ctl格式為:
load data
infile "d://test.txt"    外部數據文件
infile "d://test1.txt"   可指定多個數據文件
append into table test   向表中追加數據
fields terminated by ","    外部文件的數據以“,”分隔
OPTIONALLY ENCLOSED BY '"'  部分字段可以用雙引號包起來
trailing nullcols        表中的字段沒有對應的值時填充空值
(
id integer external,    integer external 表示插入的數據是string,如果只保留integer,表示插入的數據是二進制
name "upper(:name)",     將插入的值轉換為大寫
con ":id||:name",        表中CON列的值是ID和NAME的組合值
dt date"yyyy-mm-dd"      插入日期型數據
)
說明:
load data
告訴SQLLDR要做什么(在這個例子中,則指示要加載數據)。SQLLDR還可以執行CONTINUE_LOAD,也就是繼續加載。只有在繼續一個多表直接路徑加載時才能使用后面這個選項
INFILE * :如果是*號,這會告訴SQLLDR所要加載的數據實際上包含在控制文件本身上,例見下一文。如上例指定包含數據的另一個文件的文件名。如果願意,可以使用一個命令行參數覆蓋這個INFILE語句。要當心,命令行選項總會涵蓋控制文件設置
在append的位置還可以用以下列表中的一個值:
insert   向表中插入值,但要求表開始時為空,默認的加載選項
replace delete表中的數據,然后插入新值,記錄多時速度慢
append   向表中追加數據
truncate trunctate表,然后插入新值,不能回退
FIELDS TERMINATED BY ‘,’:告訴SQLLDR數據的形式應該是用逗號分隔的值。為SQLLDR描述輸入數據的方式有數十種;這只是其中較為常用的方法之一。
     TERMINATED BY WHITESPACE會解析這個串,查找空白符(制表符、空格和換行符)的第一次出現,然后繼續查找,直至找到下一個非空白符。
(id integer external,
.....
dt date"yyyy-mm-dd"):告訴SQLLDR所要加載的列、這些列在輸入數據中的順序以及數據類型。這是指輸入流中數據的數據類型,而不是數據庫中的數據類型。列的數據類型默認為CHAR(255)

     加載這樣的定界數據時,很可能想逃過輸入記錄中的某些列。例如,你可能加載字段1、3和5,而跳過第2列和第4列。為此,SQLLDR提供了FILLER關鍵字。這允許你映射一個輸入記錄中的一列,但不把它放在數據庫中。


例:
C:\>sqlldr scott/tiger control=d:/dept.ctl log=d:/sqlldr.log

dept.ctl的內容如下:

load date
infile "d://test.txt"   
append into table tt
fields terminated by ","  
trailing nullcols      
(
id integer external,  
name "upper(:name)",    
con ":id||:name",      
dt date"yyyy-mm-dd"     
)

test.txt的數據如下
1,a,,2007-07-8
2,b,,2008-07-8
3,c,,2009-07-8

附錄:有效的關鍵字:方便今后使用和查詢。

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM