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"