根据 Oracle 数据库的 status 状态值判断数据库的运行状态,并将每次读取的状态值更新存储在文件中,再根据读取的状态值做不同情况下的处理。
并且利用 while true 死循环,一直对数据库的状态实时检测,睡眠30秒检测一次。
#!/bin/bash
log()
{
echo "$@" >> /mnt/log/checkdatabase.log
}
checkdatabase()
{
su - oracle -c "sqlplus / as sysdba" << EOFF > /mnt/oraclestatus.txt
SELECT STATUS FROM v\$instance;
EOFF
oraclestatus=$(cat /mnt/oraclestatus.txt | grep "OPEN")
log "oraclestatus状态为:$oraclestatus"
if [[ ${oraclestatus} =~ "OPEN" ]];
then
log "Database is open"
else
log "Database is error,prepare reboot..."
sleep 3
# reboot # 数据库异常则重启,此处处理方式可自行设置
return 100
fi
}
while true
do
checkdatabase "$@"
sleep 30
done
如果想开机就启动该检测文件,可以将该文件写入到启动脚本中。
在 /etc/rc.d/rc.local 文件中加入以下代码:
su - root -c /checkOracle.sh
服务器每次启动都会运行脚本,持续检测数据库运行状态。