ups机制下停电提前关闭oracle数据库

   思路:在一个受ups保护的机器A1上写脚本,几分钟(如半分钟)ping不在ups保护的机器B,如果几次(如5次)ping不同,这时我们认为将要停电,此时脚本执行正常关闭受ups保护的机器上数据库的命令。注意,1-要保证在有电时A1和B的连通性,2-停电来电后,最好先开启B机器,然后开启其他机器。

check_ping.sh

#!/bin/bash

#检测主机
Server=172.18.88.11

#ping不通时临时结果保存位置
Ping_Result=/root/ping_result.tmp

#检测日志
LOG=/root/ping.log

#连续检测不通次数
CheckNum=5

#检查间隔时间
CheckInterval=30s

#当前已连续检测不通次数
Count=0

while true
do
    ping -w 3 $Server > $Ping_Result
    [ `grep 'time=' $Ping_Result|wc -l` -ge 1 ]
    Result=$?

    if [ $Result -eq 0 ]
    then
        Count=0
        echo >> $LOG
        echo `date +%Y-%m-%d_%H:%M:%S` 'check OK'>> $LOG
        echo >> $LOG
    else
        ((Count=$Count+1))
    
        echo >> $LOG
        echo `date +%Y-%m-%d_%H:%M:%S` 'ping error' >> $LOG
        echo 'ping result:'>> $LOG
        echo '    consecutive '$Count' times' >> $LOG
        echo '    连续第' $Count '次未ping通' >> $LOG
    echo 'ping detail:' >> $LOG
    cat $Ping_Result |xargs -i echo '    '{} >> $LOG
        echo >> $LOG

        if [ $Count -eq $CheckNum ]
        then        
            echo 'shutdown oracle ...' >> $LOG
            su - oracle -c '/home/oracle/stop.sh' >> $LOG 
            echo 'shutdown oracle complete' >> $LOG
            echo >> $LOG
            echo >> $LOG

            Count=0
        fi
    fi
    
    sleep $CheckInterval
done

stop.sh

#!/bin/sh

lsnrctl stop

sqlplus /nolog <<EOF
connect / as sysdba
shutdown abort
exit
exit

echo "oracle stop"
posted @ 2015-08-13 09:26  豆苗稀  阅读(409)  评论(0编辑  收藏  举报