#!/bin/sh
#zlkh.sh
#增加对数据的校验 张明伟
nul="/dev/null";
dt=$(date +"%Y%m%d")
log=${0##*/};
tmpfile=/tmp/${log}_$RAMDOM
log=$HOME/zmw_data/logs/${log%%.*}.log
. $HOME/.bash_profile
export LANG=zh_CN
export LC_ALL=zh_CN
echo >>$log;
date >>$log;
monstr=${dt:0:6}01
nxtmss=$(date +"%Y%m%d" -d "$monstr +1 months ")
monend=$(date +"%Y%m%d" -d "${nxtmss:0:6}01 -1 days ")
maxccnt=100;
#datadate检查
filtersql="
SELECT DISTINCT a.DATADATE
FROM PLAT_DDDFN a
WHERE a.DATADATE BETWEEN $monstr AND $monend
and a.DATADATE NOT IN (SELECT DISTINCT DATADATE FROM PLAT_ZLKH )
ORDER BY 1
";
db2 connect to zxjxdbs>$nul;
db2 -x "$filtersql" >$tmpfile;
while getopts "s:e:d:" opt
do
case "$opt" in
"s") strdt=$OPTARG;;
"e") enddt=$OPTARG;;
"d") datadate=$OPTARG;;
"a") autoflg="Y";;
*) echo "Usage: ${0##*/} [ -s startdate -e enddate] [-d datadate] "
exit;;
esac
done
#20311230 张明伟 改造成函数
call_cycle()
{
sstrdt=$1;
senddt=$2;
while [ $sstrdt -le $senddt ]
do
echo strdate is $sstrdt enddate is $senddt | tee -a $log;
echo db2 -x "call pc_zlkh(?,?,?,?,$sstrdt)";
d=0
i=1
#common exe time is 30 secs
while [ $d -le 30 -a $i -lt $maxccnt ]
do
if [ $i -gt 1 ];then
sleep 300
fi
db2 connect to zxjxdbs>$nul;
date >>$log;
dts=$(date +"%Y%m%d%H%M%S")
db2 -x "call pc_zlkh(?,?,?,?,$sstrdt)" >>$log;
dte=$(date +"%Y%m%d%H%M%S")
d=$((dte-dts))
echo db2 -x "call pc_zlkh(?,?,?,?,$sstrdt)" 运行第 $i 次 | tee -a $log;
echo "pc_zlkh(?,?,?,?,$sstrdt)运行时长为:$((d/3600))小时$((d/60))分$((d%60))秒" | tee -a $log;
db2 connect reset>$nul;
db2 terminate>$nul;
i=$((i+1))
done
sstrdt=$(date -d "$sstrdt +1 days" +"%Y%m%d")
done
}
if [ "$strdt" = "" -a "$datadate" = "" ];then
datadate=$(date -d " -1 days" +"%Y%m%d")
fi;
if [ "$strdt" = "" -o "$enddt" = "" ];then
echo "enddt is null,please input then -s or -e argument"
strdt=$datadate
enddt=$datadate
call_cycle $strdt $enddt
exit;
fi;
#检查文件,如果有遗漏数据,进行处理
if [ -s $tmpfile ]
then
while read line
do
if [ ${line:0:2} -eq 20 ]
then
call_cycle $line $line;
fi;
done<$tmpfile;
exit;
fi;
rm -f $tmpfile;