Here's a script that checks the tablespace utilization on a database, and sends a mail if it crosses a threshold
#!/bin/bash # Tablespace check script # Author: Nabeel Moidu # Website: nmkuttiady.blogspot.com # Set threshold here THRESHOLD=70 # Set the Oracle user here ORACLE_USER=ora10g # Set the mail id of the DBA DBA="dba@organization.tld" # Get output of tablespace usage on the database su - $ORACLE_USER -c "sqlplus -s \"/ as sysdba\" < /backup/script/tablespace_usage.sql > /tmp/output.txt "
# Remove blank lines from file
cat /tmp/output.txt | grep -v ^$ | grep -v "no rows selected" > tablespaces.txt
# If no tablespace crosses threshold, the file will be empty. So send mail only if file not empty
if test -s "tablespaces.txt" then # Prepare the mail echo "The following tablespaces have exceeded the 60 percent threshold" > mail.txt #Send the mail with the hostname in subject HOST=`hostname` SUBJECT="Daily Tablespace Check - "$HOST echo $SUBJECT mail -s "$SUBJECT" $DBA < mail.txt fiThis is the SQL query to get the tablespace output
set pages 700 set linesize 1000 select t.tablespace_name,total_MB,round((total_MB-free_MB),2) used_MB, round(free_MB,2) free_MB,round(((total_MB-free_MB)/total_MB)*100,2) per_used,round((free_MB/total_MB)*100,2) per_free from (select tablespace_name,sum(bytes/1024/1024) free_MB from dba_free_space group by tablespace_name) f,(select tablespace_name,sum(bytes/1024/1024) total_MB from dba_data_files group by tablespace_name) t where f.tablespace_name(+)=t.tablespace_name order by 5;
2 comments:
Hi,
This script is useful. but the scripts sends mail even if none of the tablespace has crossed threshold.
Is it possible to send email only if it crosses threshold.
Script modified accordingly.
Post a Comment