#!/bin/bash
###############################################################################
# File Name   : asmdiskgroup_free_space.sh
# Author      : Vimal Raju
# Date        : 27/11/2014
# Description : asmdiskgroup size check
#
###############################################################################
#############################################################
#
# Display usage infommation
#
usage () {

  echo ” “
  echo ” Checking the asmdiskgroup free space “
  echo ”       -h Display this message”
  echo ”       -e specify the environment file with location (Mandatory) (Example : /home/oracle/db.env ) “
  echo ”       -m specify the email address (Mandatory) (Example : test@gmail.com ) “
  echo ”       -p Specify the Percentage of the asmdiskgroup size check (default : 80 )”
  echo ”       -l Specify the Log file location (default : /tmp )  “
  echo ”     Example : asmdiskgroup_free_space.sh -e /home/oracle/db.env -m support@doyensys.com “

  exit 1

}

validate() {

INDFILE=${LOG_LOC}/tablepace_size_check.ind
  # To check if the indicator file is there
  if [ -f ${INDFILE} ]; then
    echo “Indicator file ${INDFILE} exists!”
    exit 1
  else
    touch ${INDFILE}
  fi

  if [ ${#ENV_FILE} -eq 0 ]; then
    echo “No Environment file name specified!”
    usage
  fi

  if [ ${#MAIL_TO} -eq 0 ]; then
    echo “No Mail address specified!”
    usage
  fi

  if [ -f ${LOG_LOC}/asmdiskgroup_trigger_tmp.log ]; then
    echo “”
  else
    touch ${LOG_LOC}/asmdiskgroup_trigger_tmp.log
  fi

  if [ -f ${LOG_LOC}/asmdiskgroup_trigger.log ]; then
    echo “”
  else
    touch ${LOG_LOC}/asmdiskgroup_trigger.log
  fi

  if [ -f ${LOG_LOC}/asmdiskgroup_check.log ]; then
    echo “”
  else
    touch ${LOG_LOC}/asmdiskgroup_check.log
  fi

}

asmdiskgroup() {

sqlplus -s / as sysdba <<EOF
set feed off
SET LINESIZE  145
SET PAGESIZE  9999
SET VERIFY    off
spool ${LOG_LOC}/asmdiskgroup_check.log
COLUMN group_name             FORMAT a20           HEAD ‘Disk Group|Name’
COLUMN sector_size            FORMAT 99,999        HEAD ‘Sector|Size’
COLUMN block_size             FORMAT 99,999        HEAD ‘Block|Size’
COLUMN allocation_unit_size   FORMAT 999,999,999   HEAD ‘Allocation|Unit Size’
COLUMN state                  FORMAT a11           HEAD ‘State’
COLUMN type                   FORMAT a6            HEAD ‘Type’
COLUMN total_mb               FORMAT 999,999,999   HEAD ‘Total Size (MB)’
COLUMN used_mb                FORMAT 999,999,999   HEAD ‘Used Size (MB)’
COLUMN pct_used               FORMAT 999.99        HEAD ‘Pct. Used’
Select * from (SELECT
    name                                     group_name
  , sector_size                              sector_size
  , block_size                               block_size
  , allocation_unit_size                     allocation_unit_size
  , state                                    state
  , type                                     type
  , total_mb                                 total_mb
  , (total_mb – free_mb)                     used_mb
  , ROUND((1- (free_mb / total_mb))*100, 2)  pct_used
FROM
    v$asm_diskgroup
ORDER BY
    name
) where pct_used > ${PERCENTAGE}  ;
spool off
EOF

trig=`cat ${LOG_LOC}/asmdiskgroup_check.log|wc -l`
check_tmp=`cat ${LOG_LOC}/asmdiskgroup_trigger_tmp.log`

if [ “${trig}” != 0 ] then
echo C > ${LOG_LOC}/asmdiskgroup_trigger.log
elif [ “${check_tmp}” = ‘T’ ] then
echo N > ${LOG_LOC}/asmdiskgroup_trigger.log
fi

check_crit=`cat ${LOG_LOC}/asmdiskgroup_trigger.log `
if [ “${check_crit}” = ‘C’ ] then
cat ${LOG_LOC}/asmdiskgroup_check.log|mailx -s “Critical : ASM DISK GROUP Total allocated > ${PERCENTAGE}” $MAIL_TO
echo T > ${LOG_LOC}/asmdiskgroup_trigger_tmp.log
elif [ “${check_crit}” = ‘N’ ] then
cat ${LOG_LOC}/asmdiskgroup_check.log|mailx -s “Normal : ASM DISK GROUP Total allocated < ${PERCENTAGE}” $MAIL_TO
echo “” > ${LOG_LOC}/asmdiskgroup_trigger.log
echo “” > ${LOG_LOC}/asmdiskgroup_trigger_tmp.log
fi

}

PERCENTAGE=80
LOG_LOC=/tmp
ENV_FILE=
MAIL_TO=

while getopts :hp:l:e:m: opt $*
    do
      case $opt in
        h) usage
           ;;
        p) PERCENTAGE=${OPTARG}
           echo PERCENTAGE set to ${PERCENTAGE}
           ;;
        l) LOG_LOC=${OPTARG}
           echo LOG_LOC set to ${LOG_LOC}
           ;;
        e) ENV_FILE=${OPTARG}
           echo ENV_FILE set to ${ENV_FILE}
           ;;
        m) MAIL_TO=${OPTARG}
           echo MAIL_TO set to ${MAIL_TO}
           ;;
        *) echo “******************************************************************”
           echo “${JOBNAME}: Invalid option found on command line: ${OPTARG}”
           echo “******************************************************************”
           usage
           ;;
      esac
    done

validate

. $ENV_FILE

asmdiskgroup

if [ -f ${INDFILE} ]; then
      rm -f ${INDFILE}
fi

Recent Posts

Start typing and press Enter to search