RHEL4下的版本。copy到任何目录都可执行。因为上次的shell并不严谨,在某些情况会有遗漏,遂重新写之。
[@more@]Oracle ENV先声明。
#Some Variables
BTIME=`date`;
ARCH_FOLDER=/u04/arch/SHxxx1;
SH_DIR=$(cd "$(dirname "$0")"; pwd);
DBA="J A "
#INIT FOLDR
if [ -f $SH_DIR/applied.lst ]
then rm -f $SH_DIR/applied.lst
fi
if [ -f $SH_DIR/compared.lst ]
then rm -f $SH_DIR/compared.lst
fi
if [ -f $SH_DIR/copy.lst ]
then rm -f $SH_DIR/copy.lst ]
fi
if [ -f $SH_DIR/SHXXX02.lst ]
then rm -f $SH_DIR/SHXXX02.lst
fi
if [ -f $SH_DIR/SHXXX02.temp ]
then rm -f $SH_DIR/SHXXX02.temp
fi
if [ -f $SH_DIR/SHXXX02.temp1 ]
then rm -f $SH_DIR/SHXXX02.temp1
fi
if [ -f $SH_DIR/SHXXX03.lst ]
then rm -f $SH_DIR/SHXXX03.lst
fi
if [ -f $SH_DIR/SHXXX03.temp ]
then rm -f $SH_DIR/SHXXX03.temp
fi
#get max sequence log applied in SHXXX03
sqlplus "/ as sysdba" >$SH_DIR/applied.lst<
@$SH_DIR/get_maxlog.sql;
EOF
row1=`tail -6 $SH_DIR/applied.lst | head -1`;
max_log=`echo $row1 | awk '{print $3}'`;
message="Now SHXXX03 has applied sequence $max_log" ;
echo "$message" > $SH_DIR/mail.message
#build SHXXX03 archived log list later than max_log
ls -l $ARCH_FOLDER/arch* | awk '{print $9}'|sed 's//u04/arch/SHxxx1/arch_1_//'| sed 's/.arc//'> $SH_DIR/SHXXX03.temp;
cat $SH_DIR/SHXXX03.temp | while read num
do
touch $SH_DIR/SHXXX03.lst
if [ $num -gt $max_log ]
then echo $num>>$SH_DIR/SHXXX03.lst
fi
done
echo "Recieved archived log sequence later than MAX_applied_log_sequence in SHXXX03" >>$SH_DIR/mail.message
echo "------------------------ I am a beeline--------------------------" >>$SH_DIR/mail.message
cat $SH_DIR/SHXXX03.lst >> $SH_DIR/mail.message
#build SHXXX02 archived log list later than max_log
ssh SHXXX02 "ls -l $ARCH_FOLDER/arch*" > $SH_DIR/SHXXX02.temp1;
cat $SH_DIR/SHXXX02.temp1 |awk '{print $9}'|sed 's//u04/arch/SHxxx1/arch_1_//'| sed 's/.arc//'> $SH_DIR/SHXXX02.temp;
cat $SH_DIR/SHXXX02.temp | while read num
do
touch $SH_DIR/SHXXX02.lst
if [ $num -gt $max_log ]
then echo $num>>$SH_DIR/SHXXX02.lst
fi
done
#compare SHXXX02.lst & SHXXX03.lst
SHXXX03_LST=`awk '{print $1}' $SH_DIR/SHXXX03.lst`
cat $SH_DIR/SHXXX02.lst | while read NUM_NB02
do
for NUM_NB03 in $SHXXX03_LST
do
if [ $NUM_NB03 -eq $NUM_NB02 ]
then touch $SH_DIR/MARK;
break;
fi
done
if [ -f $SH_DIR/MARK ]
then rm -f $SH_DIR/MARK
else echo $NUM_NB02 >> $SH_DIR/compared.lst
fi
done
echo "------------------------ I am a beeline--------------------------" >> $SH_DIR/mail.message
echo " ****** " >> $SH_DIR/mail.message
echo "These archived log sequence will be copied" >> $SH_DIR/mail.message
echo "------------------------ I am a beeline--------------------------" >> $SH_DIR/mail.message
cat $SH_DIR/compared.lst >> $SH_DIR/mail.message
echo "------------------------ I am a beeline--------------------------" >> $SH_DIR/mail.message
#Build archived log needed to COPY
cat $SH_DIR/compared.lst | while read num
do
filename=$ARCH_FOLDER/arch_1_$num.arc
scp SHXXX02:$filename $ARCH_FOLDER
if [ $? -eq 0 ]
then echo "$filename has been copied." >> $SH_DIR/copy.lst
fi
done
echo " ****** " >> $SH_DIR/mail.message
echo "These archived log has been copied" >> $SH_DIR/mail.message
echo "------------------------ I am a beeline--------------------------" >> $SH_DIR/mail.message
cat $SH_DIR/copy.lst >> $SH_DIR/mail.message
echo "------------------------ I am a beeline--------------------------" >> $SH_DIR/mail.message
ETIME=`date`;
echo "Begine at $BTIME" >> $SH_DIR/mail.message
echo "End at $ETIME" >> $SH_DIR/mail.message
mail -s "SCP archived log Staus: SHXXX02 ---> SHXXX03 " $DBA < $SH_DIR/mail.message > /dev/null 2>&1;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10856805/viewspace-999767/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10856805/viewspace-999767/