Pre-requisites to Run the script:
Make sure mailx is installed on your OS, also check below environements/file is created prior to execute the scripts.
This script is tested on Linux Server.
This script needs to be deployed in database node/server.
#Base location for the DBA scripts DBA_SCRIPTS_HOME=$HOME/DBA_MON
#OS User profile where database environment file is set $HOME/.bash_profile
Create Custom .sysenv file for scripts
Download(.sysenv)
Download .sysenv file and save it under $HOME/DBA_MON $ chmod 777 .sysenv
$ cat $HOME/DBA_MON/.sysenv
export DBA_SCRIPTS_HOME=$HOME/DBA_MON export PATH=${PATH}:$DBA_SCRIPTS_HOME export DBA_EMAIL_LIST=kiran.jadhav@domain.com,jadhav.kiran@domain.com #Below parameter is used in script, whenever there is planned downtime you can set it to Y so there will be no false alert. export DOWNTIME_MODE=N
Script to check database status or availability, if down then notify to DBA Team.
Download(DBStatusCheck.sh)
Download DBStatusCheck.sh and save it under $HOME/DBA_MON/bin/ $ chmod 755 DBStatusCheck.sh
#!/bin/bash ###################################################################################### # Script Name : DBStatusCheck.sh # # # # Description: # # Script to check database status or availability, if down then notify the DBA Team. # # # # # # Usage : sh <script_name> <ORACLE_SID> # # For example : sh DBStatusCheck.sh ORCL # # # # Created by : Kiran Jadhav - (https://h2hdba.blogspot.com) # ###################################################################################### # Initialize variables INSTANCE=$1 HOST_NAME=`hostname | cut -d'.' -f1` PROGRAM=`basename $0 | cut -d'.' -f1` export DBA_SCRIPTS_HOME=$HOME/DBA_MON APPS_ID=`echo $INSTANCE | tr '[:lower:]' '[:upper:]'` LOG_DIR=$DBA_SCRIPTS_HOME/logs/$HOST_NAME OUT_FILE=$LOG_DIR/`echo $PROGRAM`_$APPS_ID.out LOG_FILE=$LOG_DIR/`echo $PROGRAM`_$APPS_ID.log ERR_FILE=$LOG_DIR/`echo $PROGRAM`_$APPS_ID.err LOG_DATE=`date` # Source the env . $HOME/.bash_profile . $DBA_SCRIPTS_HOME/.sysenv if [ $? -ne 0 ]; then echo "$LOG_DATE" > $LOG_FILE echo "Please pass correct environment : exiting the script \n" >> $LOG_FILE cat $LOG_FILE exit fi if [ -s $OUT_FILE ]; then echo "$LOG_DATE" > $LOG_FILE echo "Deleting existing output file $OUT_FILE" >> $LOG_FILE rm -f $OUT_FILE cat $LOG_FILE fi # If there is a plan downtime then create $ORACLE_SID.down file in $DBA_SCRIPTS_HOME to silent the alerts during maintenance window. if [ -f $DBA_SCRIPTS_HOME/`echo $ORACLE_SID`.down ]; then echo "$LOG_DATE" >> $LOG_FILE echo "Host: $HOST_NAME | Instance: $ORACLE_SID is under maintenance: exiting the script" >> $LOG_FILE cat $LOG_FILE exit fi if [ $DOWNTIME_MODE = "Y" ]; then echo "$LOG_DATE" >> $LOG_FILE echo "Host: $HOST_NAME | Instance: $ORACLE_SID is under maintenance: exiting the script" >> $LOG_FILE cat $LOG_FILE exit fi usage() { echo "$LOG_DATE" > $LOG_FILE echo "Script to monitor database availability" >> $LOG_FILE echo "Usage : sh <script_name> <ORACLE_SID> " >> $LOG_FILE echo "For example : sh $PROGRAM.sh $ORACLE_SID" >> $LOG_FILE echo } if [ $# -lt 1 ] || [ "$INSTANCE" != "$ORACLE_SID" ]; then usage echo "Error : Insufficient arguments." >> $LOG_FILE cat $LOG_FILE exit fi check_db() { sqlplus -s '/as sysdba' <<! set heading off set feedback off select count(1) from ( select name from v\$database ); exit; ! } count_db=`check_db` #echo $count_db check_pmon() { process=`ps -ef|grep ora_pmon_$ORACLE_SID | grep -v grep | wc -l` echo $process } count_pmon=`check_pmon` #echo $count_pmon echo "$LOG_DATE" > $ERR_FILE check_db >> $ERR_FILE ERR_COUNT=`grep -c "ORA-" $ERR_FILE` if [ $ERR_COUNT -gt 0 -o `check_pmon` -eq 0 ]; then echo "Database $APPS_ID is DOWN!! Please check ASAP"| mailx -s "Critical : Database $APPS_ID is DOWN on $HOST_NAME" $DBA_EMAIL_LIST else echo "$LOG_DATE" > $OUT_FILE echo "Database $APPS_ID is up and running fine" >> $OUT_FILE fi
Logs and Out files will be generated under $DBA_SCRIPTS_HOME/logs/$HOST_NAME So make sure to create logs/$HOST_NAME directory under $DBA_SCRIPTS_HOME before executing the script.
Once the script is ready, then as per the requirement please schedule it in crontab/OEM. Execute the Script as below: Syntax : sh <script_name> <ORACLE_SID> $ cd $HOME/DBA_MON/bin $ sh DBStatusCheck.sh ORCL
This script will send the notification if database is down or unavailable.
No comments:
Post a Comment