公司的库里面不是所有的表空间都是unlimted,所以还是要搞个邮件发送,时不时监控一下表空间的使用率。以下是我参考一些文档,修改后在我工作中使用的。我的数据库版本是11.2.0.4,Linux版本是Centos 6.3。

  1. #!/bin/bash  
  2. ORACLE_SID=orcl; export ORACLE_SID  
  3. ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE  
  4. ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1; export ORACLE_HOME  
  5. $ORACLE_HOME/bin:/usr/ccs/bin:/bin:/usr/bin:/usr/sbin:/sbin:/usr/openwin/bin:/opt/bin:.;  
  6. export PATH  
  7. DBALIST="masicong1019@hotmail.com";export DBALIST  
  8. sqlplus -s '/ as sysdba' <<EOF  
  9. set feed off  
  10. set linesize 100  
  11. set pagesize 200  
  12. column "USED (MB)" format a10  
  13. column "FREE (MB)" format a10  
  14. column "TOTAL (MB)" format a10  
  15. column PER_FREE format a10  
  16. spool tablespace.alert  
  17. SELECT F.TABLESPACE_NAME,  
  18. TO_CHAR ((T.TOTAL_SPACE - F.FREE_SPACE),'999,999') "USED (MB)",  
  19. TO_CHAR (F.FREE_SPACE, '999,999') "FREE (MB)",  
  20. TO_CHAR (T.TOTAL_SPACE, '999,999') "TOTAL (MB)",  
  21. TO_CHAR ((ROUND ((F.FREE_SPACE/T.TOTAL_SPACE)*100)),'999')||' %' PER_FREE  
  22. FROM (  
  23. SELECT TABLESPACE_NAME,  
  24. ROUND (SUM (BLOCKS*(SELECT VALUE/1024  
  25. FROM V$PARAMETER  
  26. WHERE NAME = 'db_block_size')/1024)  
  27. ) FREE_SPACE  
  28. FROM DBA_FREE_SPACE  
  29. GROUP BY TABLESPACE_NAME  
  30. ) F,  
  31. (  
  32. SELECT TABLESPACE_NAME,  
  33. ROUND (SUM (BYTES/1048576)) TOTAL_SPACE  
  34. FROM DBA_DATA_FILES  
  35. GROUP BY TABLESPACE_NAME  
  36. ) T  
  37. WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME  
  38. AND (ROUND ((F.FREE_SPACE/T.TOTAL_SPACE)*100)) < 80;  
  39. spool off  
  40. exit  
  41. EOF  
  42. if [cat tablespace.alert|wc -l -gt 0]  
  43. then  
  44. cat tablespace.alert > tablespace.tmp  
  45. mailx -s "TABLESPACE  ALERT  for  PPRD10" $DBALIST < tablespace.tmp  
  46. fi