Script to get tablespace alert in Oracle

 

Script to get tablespace alert in Oracle

 

This script can be run on any Uinx/Linux flavours.
For AIX,HP, and Linux oratab’s path is /etc/oratab, for solaris oratab’s path is as /var/opt/oracle/oratab.
Threshold value is 100-PCT value .In the below script PCT value mentioned as 5, so threshold value is 95%.
If the tbs used space is crossed 95 % then we will receive mail .

 

Script Name: tbs_check.ksh

#!/bin/ksh
PCT=5
SERVER=`uname -a |awk ‘{print $2}’`
ps -ef|grep pmon|grep -v asm|grep -v grep|awk ‘{print $NF}’ |cut -d_ -f3|while read sid;
do
ORACLE_SID=$sid
export ORACLE_SID
if [ -f /etc/oratab ];
then
orahome=`cat /etc/oratab |sed ‘/^#/d’ |grep -w $ORACLE_SID|cut -d: -f2`
ORACLE_HOME=$orahome
export ORACLE_HOME
PATH=$ORACLE_HOME/bin:$PATH:.
LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH
LIBPATH=$ORACLE_HOME/lib
export LIBPATH
export PATH
else
orahome=`cat /var/opt/oracle/oratab |grep -w $ORACLE_SID|cut -d: -f2`
ORACLE_HOME=$orahome
export ORACLE_HOME
PATH=$ORACLE_HOME/bin:$PATH:.
export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH
LIBPATH=$ORACLE_HOME/lib
export LIBPATH
fi
sqlplus -s “/as sysdba” <<!
set feed off
set linesize 200
set pagesize 200
spool $ORACLE_BASE/scripts/alert/log/tablespace_$sid.alert
SELECT F.TABLESPACE_NAME,
TO_CHAR ((T.TOTAL_SPACE – F.FREE_SPACE),’999,999′) “USED(MB)”,
TO_CHAR (F.FREE_SPACE, ‘999,999’) “FREE(MB)”,
TO_CHAR (T.TOTAL_SPACE, ‘999,999’) “TOTAL(MB)”,
TO_CHAR ((ROUND ((F.FREE_SPACE/T.TOTAL_SPACE)*100)),’999′)||’ %’ PER_FREE
FROM (
SELECT TABLESPACE_NAME,
ROUND (SUM (BLOCKS*(SELECT VALUE/1024
FROM V\$PARAMETER
WHERE NAME = ‘db_block_size’)/1024)
) FREE_SPACE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME
) F,
(
SELECT TABLESPACE_NAME,
ROUND (SUM (BYTES/1048576)) TOTAL_SPACE
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME
) T
WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME
AND (ROUND ((F.FREE_SPACE/T.TOTAL_SPACE)*100)) <$PCT;
spool off
exit
!
if [ `cat $ORACLE_BASE/scripts/alert/log/tablespace_$sid.alert|wc -l` -gt 0 ]
then
mailx -s “`date` Tablespace alert on $sid – $SERVER” dbgrp@ajara.tech < $ORACLE_BASE/scripts/alert/log/tablespace_$sid.alert
fi
done

 

How to run the script  Manually ?

nohup sh tbs_check.ksh >tbs_check_manual.log &

 

Crontab entry:

00,15,30,45  07 * * * /u00/app/oracle/scripts/tbs_check.ksh > /u00/app/oracle/scripts/tbs_check.cron.out

 

See also: