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