#!/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;