使用sqlload導(dǎo)文本數(shù)據(jù)到oracle中想必很多人多使用過,但是倘若有幾百或者幾千個(gè)數(shù)據(jù)文本,或者實(shí)時(shí)有文本數(shù)據(jù)產(chǎn)生。這種場(chǎng)景如何批量導(dǎo)入oracle呢,下面就來講解下我處理的方式。
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),芷江企業(yè)網(wǎng)站建設(shè),芷江品牌網(wǎng)站建設(shè),網(wǎng)站定制,芷江網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,芷江網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
1.shell腳本LoadData.sh如下
#!/bin/bash data_dir=/home/bea/datasource/warn-log/dayflow # 文本數(shù)據(jù)目錄 data_dir_bak=/home/bea/datasource/warn-log/dayflow_bak shell_dir=/home/bea/script while [ 1 ] do cd $data_dir if [ `pwd` == $data_dir ] then filelist=`ls -rt | grep dayflow.log_.` #數(shù)據(jù)文本文件名匹配 fi #echo $filelist cd $shell_dir if [ `pwd` == $shell_dir ] then for file in $filelist do date=`date "+%Y%m%d %H:%M:%S"` export LoadFileName=$data_dir"/"$file #這個(gè)地方很重要,要加載變量到環(huán)境中 echo "Time is $date ,開始導(dǎo)$LoadFileName數(shù)據(jù)" sqlldr user_1/123456@213_db control=dayflow.log.ctl BAD=dayflow.log.bad echo "Time is $date ,$LoadFileName數(shù)據(jù)導(dǎo)入完畢" echo "開始備份文件$file" mv $LoadFileName $data_dir_bak echo "$file備份完畢" done fi done
這個(gè)地方最應(yīng)該要注意的是
export LoadFileName=$data_dir"/"$file
這里將LoadFileName (導(dǎo)入oracle 的文本,絕對(duì)路徑)這個(gè)變量 export到linux環(huán)境中,這樣sqlload的控制文件就可以讀到這個(gè)變量并進(jìn)行導(dǎo)入
2.sqlldr控制文本dayflow.log.ctl
load data CHARACTERSET AL32UTF8 infile '$LoadFileName' APPEND into table user_1.BIL_FLUX_HIGH_CUR fields terminated by '|' trailing nullcols (ACCS_NBR "TRIM(:ACCS_NBR)", DATE_ID "TRIM(:DATE_ID)", TOTAL_FLUX "TRIM(:TOTAL_FLUX)", sys_date "sysdate")
請(qǐng)注意 infile '$LoadFileName',這里就是shell中 剛才export的變量,通過這種方式就可以以變量的形式傳入文件名,那么批量導(dǎo)入也就是一個(gè)循環(huán)的操作。