關(guān)于Oracle中SqlLoader的用法
簡介:
SQL*LOADER是ORACLE的數(shù)據(jù)加載工具,通常用來將操作系統(tǒng)文件(數(shù)據(jù))遷移到ORACLE數(shù)據(jù)庫中。SQL*LOADER是大型數(shù)據(jù)倉庫選擇使用的加載方法,因為它提供了最快速的途徑(DIRECT,PARALLEL)。
目前的理解就是:把文本文件,log文件,excel導入到數(shù)據(jù)庫中
寫sqlldr只需2步:
1:建立一個ctl控制文件
OPTIONS (skip=1,rows=128) #sqlldr 命令顯示的 選項可以寫到這里邊來,skip=1 用來跳過數(shù)據(jù)中的第一行 LOAD DATA #控制文件標識 INFILE '/app/audit/shell/monitor/inter.txt' #要導入的文件。目前搜索資料看到的可以是log文件,txt文本文件,excel文件 BADFILE '/app/audit/shell/monitor/inter.dat' #BADFILE 壞數(shù)據(jù)。這里還可以使用DISCARDFILE 來指定丟棄數(shù)據(jù)的文件, truncate #操作類型,用 truncate table 來清除表中原有 記錄 ,也可以用 insert,append,replace等代替truncate,下面會詳細講解 into table ts_of_ceshi_mid1 #往ts_of_ceshi_mid1中插入數(shù)據(jù) Fields terminated by "|" #用于分割一行中各個屬性值的符號(例如每個屬性值用逗號 分割 , 那么就把 "|" 改為 ",") Optionally enclosed by '"' #數(shù)據(jù)中每個字段用 '"' 框起,比如字段中有 "," 分隔符時 TRAILING NULLCOLS #表的字段沒有對應(yīng)的值時允 許為空 如果不加入這行導入到數(shù)據(jù)庫的時候就會自動跳過字段是null值的那一列, 這樣數(shù)據(jù)插入后就會屬性和值對應(yīng)不上 ( orig_name, true_name, status, rec_num number, #字段可以指定類型,否則認 為是 CHARACTER 類型, log 文件中有顯示 last_rec_num, last_cycle, last_status, finsh_date DATE "YYYY-MM-DD HH24:MI:SS" #可以指定接受日期的格式,相當用 to_date() 函數(shù)轉(zhuǎn)換 )
2:在命令窗口執(zhí)行,或者在shell腳本中寫
nohup sqlldr 用戶名/密碼@數(shù)據(jù)庫名稱 control=/app/audit/txt/inter.ctl log=/app/audit//txt/inter.log
nohup可以不用寫,我這是掛到后臺執(zhí)行,所以用nohup??梢灾苯訉懀?/p>
sqlldr 用戶名/密碼@數(shù)據(jù)庫名稱 control=/app/audit/txt/inter.ctl log=/app/audit//txt/inter.log
擴展: sqlldr參數(shù)
有效的關(guān)鍵字:
userid -- ORACLE username/password
control -- 控制文件
log -- 記錄的日志文件
* -- 表示數(shù)據(jù)文件在控制文件之后,如果是獨立的數(shù)據(jù)文件,則把文件代替*
bad -- 壞數(shù)據(jù)文件,記錄錯誤的未加載數(shù)據(jù)
data -- 數(shù)據(jù)文件,* data參數(shù)只能指定一個數(shù)據(jù)文件,如果控制文件也通過infile指定了數(shù)據(jù)文件,并且指定多個, 則sqlldr在執(zhí)行時,先加載data參數(shù)指定的數(shù)據(jù)文件,控制文件中第一個infile指定的數(shù)據(jù)文件被忽略, 但后續(xù)的infile指定的數(shù)據(jù)文件繼續(xù)有效
discard -- 丟棄的數(shù)據(jù)文件,默認情況不產(chǎn)生,必須指定
discardmax -- 允許丟棄數(shù)據(jù)的最大值 (全部默認)
skip -- 跳過記錄數(shù),從數(shù)據(jù)文件中,從第一行開始要計算要跳過的行數(shù),*,對于多表加載的情況,如果有when條件判斷的話,或者直接路徑下的多表加載,如果要加載的記錄數(shù)不同,則該參數(shù)無效.
load -- 給你一萬行的數(shù)據(jù),卻只要求你導入10行
errors -- 允許的錯誤記錄數(shù),超過則終止任務(wù) (默認50)
rows -- 常規(guī)路徑導入時:指綁定數(shù)組中的行數(shù);直接路徑導入時,指一次從數(shù)據(jù)文件只讀取的行數(shù),該參數(shù)同時受bindsize制約,如果rows*每行實際占用大小超出bindsize最大可用值,則rows自動降低達到bindsize最大可用值(每次提交的記錄數(shù),默認: 常規(guī)路徑 64, 所有直接路徑)
bindsize -- 為綁定數(shù)組指定的最大可用空間,用來存貯一次讀取的rows的記錄,該值不能太小,至少要放入一條邏輯記錄 但設(shè)置太大也沒什么作用。 每次提交記錄的緩沖區(qū)的大小(字節(jié)為單位,默認256000)
bind array size=(number of rows)*(sun(fixed field lengths)+sum(maximum varying field lengths)+((number of varying length fields)*(size of length indicator)))
silent -- 禁止輸出信息 (header,feedback,errors,discards,partitions)
sqlldr scott/scott control=ldr_case9.ctl silent=header 這樣就可以不輸出頭部信息了.
direct -- 使用直通路徑方式導入,不走buffer cache,通過direct path api發(fā)送數(shù)據(jù)到服務(wù)器端的加載引擎,加載引擎按照數(shù)據(jù)塊的格式處理數(shù)據(jù)并直接寫向數(shù)據(jù)文件,因此效率較高(默認FALSE)
parfile -- 高密度的sqlldr導入,省得寫參數(shù),就建個腳本吧
parallel -- 并行導入 僅在直接路徑加載時有效(默認FALSE)
file -- 并行加載時會用到該參數(shù),指定file參數(shù),要加載的內(nèi)容即只向指定的數(shù)據(jù)文件寫入數(shù)據(jù),減少i/o
skip_unusable_indexes --默認為false,如果是true,則加載完數(shù)據(jù)時,就算此表索引不可用,數(shù)據(jù)加載完不會改變此索引狀態(tài),oracle 數(shù)據(jù)庫中也有此同名參數(shù),但順序是先看sqlldr,再數(shù)據(jù)庫
skip_index_maintenance --是否跳過索引維護,默認false,直接路徑加載有效,如果設(shè)置為true,因加載完數(shù)據(jù)不維護索引,因此索引會失效.
readsize -- 緩沖區(qū)大小,默認值:1048576單位字節(jié),最大不超過20m,該參數(shù)僅當從數(shù)據(jù)文件讀取時有效,如果是從近制文件讀取數(shù) 據(jù),則默認為64k
external_table -- not_used:不使用外部表,通過常規(guī)路徑或直接路徑加載數(shù)據(jù)
enerate_only --sqlldr并不執(zhí)行加載,而是生成創(chuàng)建外部表的sql和處理數(shù)據(jù)的sql,并保存在log文件中,用戶可以修改后拿到sqlplus中執(zhí)行
execute -- 執(zhí)行外部表并加載數(shù)據(jù)
columnarrayrows --指定直接路徑加載時流緩沖區(qū)的行數(shù) Number of rows for direct path column array(默認5000)
streamsize : --指定直接路徑加載時流緩沖區(qū)的大小 Size of direct path stream buffer in bytes(默認256000)
multithreading --是否啟用多線程,多cpu為true,單cpu false,直接路徑加載時有效use multithreading in direct path
resumable --會話等待空閑空間分配,在執(zhí)行sqlldr時,如果余下空間不足,false參數(shù)則直接報錯退出,如果設(shè)置為true,則等待,讓dba手動處理,達到resumable_timeout參數(shù)中指定的超時時間,再退出
enable or disable resumable for current session(默認FALSE)
resumable_name --會話標示名,通過查詢user_resumable或dba_resumable二個字典來獲取信息,text string to help identify resumable statement
resumable_timeout --會話超時,在多少時間未能執(zhí)行sqlldr則退出,設(shè)置true有效 ,wait time (in seconds) for RESUMABLE(默認7200)
date_cache --日期轉(zhuǎn)換用緩存在,用于提高轉(zhuǎn)換效率.僅在直接路徑加載時有用 ,size (in entries) of date conversion cache(默認1000)
到此這篇關(guān)于關(guān)于Oracle中SqlLoader的用法的文章就介紹到這了,更多相關(guān)SqlLoader用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
CentOS 6.4下安裝Oracle 11gR2詳細步驟(多圖)
這篇文章主要介紹了2013-11-11給Oracle添加split和splitstr函數(shù)的方法
最近項目中有很多需要做批量操作的需求,客戶端把一組逗號分隔的ID字符串傳給數(shù)據(jù)庫,存儲過程就需要把它們分割,然后逐個處理2012-11-11