#! /bin/bash
#以oracle用户安装ORACLE客户端
#并在oracle主目录设置的.bash_profile设置ORACLE_HOME目录
#同时把sqlldr的程序所在目录加入环境变量中
. ~/.bash_profile
export LANG=en_US
if [ $# = 0 ] ; then
DT=`(date +%Y-%m-%d --date='1 days ago')`
elif [ $# = 1 ] ; then
DT=$1
else
echo "Usage: $0 {Date(format:2009-08-01)}"
exit
fi
OperDir=/data/load_data/sohu
FileList=${OperDir}/filelist.txt
LogFile=${OperDir}/log/load.log
cd ${OperDir}/data
#从ftp中获取文本数据并通过sqlldr导入到oracle
ftp -t -i -n <<EOF
open 172.16.33.239
user ftpuser ftppassword
binary
mget sohu-sms-${DT}*.txt
bye
EOF
ls | grep sms > ${FileList}
cd $OperDir
Num=`cat $FileList | wc -l`
Files=`cat $FileList`
if [ $Num -gt 0 ];then
# if [ ! -d data_backup/${DT} ] ; then
# mkdir data_backup/${DT}
# fi
for i in $Files
do
# 每读取一个文件,生成crontor文件(sohu.ctl),并执行导入
# infile后面的为导入文件,
# badfile是导入失败后产生的文件(可以看作是导入是失败后的数据日志文件,即导入失败了infile文件中的记录)
# discardfile是导入中断后产生的文件(可以看作是导入是中断后的数据日志文件,即导入中断了infile文件中的记录)
echo "load data infile 'data/$i' badfile 'data/$i.bad' discardfile 'data/$i.dsc' append into table sms_hdwx.t_souhu_mt_records fields terminated by ',' (spcode,phone,serviceId,linkid,stat,mt_time)" > sohu.ctl
# 通过sqlldr导入,并输出生成的日志文件sohu_${DT}.log
sqlldr username/password control=sohu.ctl log=${OperDir}/log/sohu_${DT}.log
mv data/$i data_backup/
if [ -s data/$i.bad ] ; then
mv data/$i.bad log/$i.bad
fi
if [ -s data/$i.dsc ] ; then
mv data/$i.dsc log/$i.dsc
fi
done
echo "${DT}:Load data success" >> $LogFile
else
echo "=======================================================================" >>$LogFile
echo " `date` no file download from this ftp server" >>$LogFile
fi
exit
# 删除日志(保留60天后删除)
find ${OperDir}/log \( -name "sohu*.log" -o -name "sohu-sms-*.dsc" -o -name "sohu-sms-*.bad" \) -ctime +60 -exec rm {} \;
# 删除备份的原始数据(保留30天)
find ${OperDir}/data_backup -name "sohu-sms-*.txt" -ctime +30 -exec rm {} \;