自動ftp,生成control file,sql*load的shell指令碼
這是一個自動從各資料來源利用ftp獲取文字檔案,
利用本地各個資料來源目錄下已有的seed.ctl動態生成sql*loader controlfile,
然後用sql*loader將資料倒入資料庫,
並獲取summary information,send mail to users。
第一次寫了這麼長的shell,很有成就感 :D
(因為需要一些環境配置,該shell無法執行,但是裡面一些指令碼自己覺得還是很滿意,尤其是動態生成控制檔案部分,更詳細的資訊直接看指令碼吧)
[@more@]#/usr/bin/bashnad_env()
{
LOG_DATE=`date "+%Y%m%d"`
EMAIL_CONTENT=/tmp/CRL_MAIL.$LOG_DATE
export EMAIL_CONTENT
}
nad_ftp()
{
FILE_TYPE=$1
FTP_LOG_FILE=./log/ftp_${FILE_TYPE}_${LOG_DATE}.log
LPATH=./in/${FILE_TYPE}
if [ ${FILE_TYPE} == 'ORDER' ]; then
FILE_EXT="moto_oe_cell_SB${LOG_DATE}*.dat"
HOST=144.***.**.***
USERNAME=orders
PASSWORD=******
RPATH=.
else
FILE_EXT="*.ZIP"
HOST=....
USERNAME=
PASSWORD=
RPATH=
fi
echo "*****************************************" >> ${FTP_LOG_FILE}
echo "Begin ftp from $HOST " `date` >> ${FTP_LOG_FILE}
echo "*****************************************" >> ${FTP_LOG_FILE}
ftp -i -n>>/dev/null<
user $USERNAME $PASSWORD
cd $RPATH
lcd $LPATH
bin
mget ${FILE_EXT}
bye
EOF
cd ./in/${FILE_TYPE}
if [ -e *.ZIP ]; then
for FILE_NAME in `ls *.ZIP|cut -d "." -f 1`
do
unzip ${FILE_NAME}.ZIP
rm ${FILE_NAME}.ZIP
done
fi
if [ -e *.dat ]; then
for FILE_NAME in `ls *.dat|cut -d "." -f 1`
do
mv ${FILE_NAME}.dat ${FILE_NAME}.txt
done
fi
cd ../..
echo "**********************************" >> ${FTP_LOG_FILE}
echo "FTP FINISHED" `date`>> ${FTP_LOG_FILE}
echo "**********************************" >> ${FTP_LOG_FILE}
}
nad_ldr()
{
FILE_TYPE=$1
for FILE_NAME in `ls in/${FILE_TYPE}/*.txt|cut -d "." -f 1|cut -d "/" -f 3`
do
echo "FILE_NAME is : "$FILE_NAME
cp ./in/${FILE_TYPE}/seed.ctl ./in/${FILE_TYPE}/${FILE_NAME}.ctltmp
sed -e "s/seed/${FILE_NAME}/g" ./in/${FILE_TYPE}/${FILE_NAME}.ctltmp > ./in/${FILE_TYPE}/${FILE_NAME}.ctl
rm ./in/${FILE_TYPE}/${FILE_NAME}.ctltmp
done
echo "FILE_TYPE is: " ${FILE_TYPE}
case ${FILE_TYPE} in
DARTMAIL) sqlplus -s siebel/siebel>>/dev/null<
EOF
SKIP_NUM=1
;;
XPEDITE) sqlplus -s siebel/siebel>>/dev/null<
EOF
SKIP_NUM=0
;;
EMAILRESP) sqlplus -s siebel/siebel>>/dev/null<
EOF
SKIP_NUM=0
;;
MODEL) sqlplus -s siebel/siebel>>/dev/null<
EOF
SKIP_NUM=0
;;
ORDER) sqlplus -s siebel/siebel>>/dev/null<
EOF
SKIP_NUM=0
;;
PRODREG) sqlplus -s siebel/siebel>>/dev/null<
EOF
SKIP_NUM=0
;;
PROMOREG) sqlplus -s siebel/siebel>>/dev/null<
EOF
SKIP_NUM=0
;;
REBATE) sqlplus -s siebel/siebel>>/dev/null<
EOF
SKIP_NUM=0
;;
UNSUB) sqlplus -s siebel/siebel>>/dev/null<
EOF
SKIP_NUM=0
;;
esac
for FILE_NAME in `ls in/${FILE_TYPE}/*.txt|cut -d "." -f 1|cut -d "/" -f 3`
{
sqlldr siebel/siebel control=./in/${FILE_TYPE}/${FILE_NAME}.ctl log=./log/${FILE_NAME}.log bad=./bad/${FILE_NAME}.bad errors=9000000 skip=${SKIP_NUM}
FLAT_FILE_NAME="./in/${FILE_TYPE}/${FILE_NAME}.txt"
LOG_FILE_NAME="./log/${FILE_NAME}.log"
if [ -e "./bad/${FILE_NAME}.bad" ]; then
BAD_FILE_NAME="./bad/${FILE_NAME}.bad"
BAD_RECDS=`cat ${BAD_FILE_NAME}|wc -l`
else
BAD_FILE_NAME="null"
BAD_RECDS=0
fi
START_DATE=`grep "Run began on" ${LOG_FILE_NAME}|awk '{print $5,$6,$7,$8}'`
END_DATE=`grep "Run ended on" ${LOG_FILE_NAME}|awk '{print $5,$6,$7,$8}'`
TOTAL_RECDS=`cat ${FLAT_FILE_NAME}|wc -l`
LOAD_RECDS=`cat ${LOG_FILE_NAME}|grep "Rows successfully loaded"|awk '{print $1}'`
if [ ${BAD_RECDS} -gt 5 ]; then
ACTION_OUTCOME="Loading failed"
else
ACTION_OUTCOME="Loading succeed"
fi
sqlplus -s siebel/siebel>/dev/null<
SET HEAD OFF
SET TERM OFF
insert into nad_eventlog
(
ACTION_NAME,
ACTION_START_DATE,
ACTION_FINISH_DATE,
ACTION_OUTCOME,
FLAT_FILE_NAME,
LOG_FILE_NAME,
BAD_FILE_NAME,
NBR_OF_TOTAL_RECORDS,
NUMBER_OF_RECORDS_LOADED,
NBR_OF_REJECTED_RECORDS
)
values(
'Data Loading--'||'${FILE_TYPE}',
to_date('${START_DATE}','Mon dd hh24:mi:ss yyyy'),
to_date('${END_DATE}','Mon dd hh24:mi:ss yyyy'),
'${ACTION_OUTCOME}',
'${FLAT_FILE_NAME}',
'${LOG_FILE_NAME}',
'${BAD_FILE_NAME}',
${TOTAL_RECDS},
${LOAD_RECDS},
${BAD_RECDS}
);
commit;
exit;
EOF
echo "" >> $EMAIL_CONTENT
echo "Load file: " ${FLAT_FILE_NAME} >> $EMAIL_CONTENT
echo "Began at: " ${START_DATE} >> $EMAIL_CONTENT
echo "Ended at: " ${END_DATE} >> $EMAIL_CONTENT
echo "Total records: " ${TOTAL_RECDS} >> $EMAIL_CONTENT
echo "Loaded records: " ${LOAD_RECDS} >> $EMAIL_CONTENT
echo "Rejected records: " ${BAD_RECDS} >> $EMAIL_CONTENT
echo "Log file: " ${LOG_FILE_NAME} >> $EMAIL_CONTENT
echo "Bad file: " ${BAD_FILE_NAME} >> $EMAIL_CONTENT
mv ./in/${FILE_TYPE}/${FILE_NAME}.txt ./inbak/${FILE_TYPE}/${FILE_NAME}.txt
mv ./in/${FILE_TYPE}/${FILE_NAME}.ctl ./inbak/${FILE_TYPE}/${FILE_NAME}.ctl
}
mail $EMAIL1 $EMAIL2<
Subject: NAD system data load log information for $FILE_TYPE
`cat $EMAIL_CONTENT`
EOF
rm $EMAIL_CONTENT
}
######################
# Main
######################
if [ $# -lt 1 ]; then
echo "Usage: ongoing SOURCE_TYPE"
exit 1
fi
FILE_TYPE=$1
nad_env
if [ ${FILE_TYPE} == 'ORDER' ]; then
nad_ftp $1
fi
nad_ldr $1
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/207/viewspace-778461/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 自動生成sqlldr 控制檔案的指令碼(Script To Generate SQL*Loader Control File)SQL指令碼
- 利用shell指令碼生成動態sql指令碼SQL
- 自動ftp指令碼FTP指令碼
- 使用shell生成orabbix自動化配置指令碼指令碼
- 一個自動生成awr報告的shell指令碼指令碼
- SQL Server映象自動生成指令碼方法SQLServer指令碼
- shell指令碼實現自動生成awr報告指令碼
- shell指令碼自動化採集效能sql指令碼SQL
- Linux使用Shell指令碼實現ftp的自動上傳下載Linux指令碼FTP
- 一個自動ftp的指令碼(轉)FTP指令碼
- 使用shell指令碼生成只讀許可權的sql指令碼指令碼SQL
- 自動生成Statspack的指令碼指令碼
- oracle報表自動FTP指令碼OracleFTP指令碼
- [Shell] Shell 生成 HTML指令碼HTML指令碼
- 自動重建失效index的shell指令碼Index指令碼
- 巧用shell指令碼生成快捷指令碼指令碼
- shell動態指令碼和pl/sql動態指令碼的比較指令碼SQL
- ORACLE自動備份shell指令碼Oracle指令碼
- svn and maven 自動部署shell指令碼Maven指令碼
- 自動建立samba目錄的shell指令碼Samba指令碼
- 透過shell指令碼生成查詢表資料的sql指令碼SQL
- 通過shell指令碼生成查詢表資料的sql指令碼SQL
- 自動生成ASH報告指令碼指令碼
- AWR報告自動生成指令碼指令碼
- 自動生成awr報告指令碼指令碼
- 幾個shell自動化指令碼(轉)指令碼
- 自動化指令碼安裝mysql shell指令碼範例指令碼MySql
- 透過shell指令碼定位效能sql和生成報告指令碼SQL
- 通過shell指令碼定位效能sql和生成報告指令碼SQL
- Shell指令碼實現生成SSL自簽署證書指令碼
- 一個自動生成oracle job的指令碼Oracle指令碼
- 使用sql生成sql指令碼SQL指令碼
- awr報告每天自動生成指令碼指令碼
- shell 備份檔案指令碼+自動清理指令碼
- Hadoop自動化安裝shell指令碼Hadoop指令碼
- AWR Report 自動生成指令碼 [final]指令碼
- 案例八:Shell自動化管理賬號指令碼指令碼
- [Shell] Shell 生成 HTML指令碼,可顯示錶格HTML指令碼