Oracle 表空间的监控


现在所有业务系统上面都部署了各种类型针对各方面的监控,那么咱们Oracle也不例外,也需要做关于oracle方面的监控,比如实例的存活状况,监听器的存活状况,系统的运行情况(包括,磁盘使用率,进程数,登陆系统用户数,系统负载情况,各类型表空间的使用率等等)基于系统运行情况的监控软件很多,比如nagios之类的,在此就不做使用和监控方法。但是要监控oracle实例的运行情况,就得一直观察oracle的告警日志,那么我们可以通过使用脚本来监控oracle实例的运行情况,当告警日志中出现ORA错误时,立即将告警日志中的错误信息提取使用邮件和短信的方式发送给咱们DBA工程师。至于表空间的监控,由于需要了解表空间的使用率,必须使用sql语句查询来看,仅仅依靠脚本是不够的,那么我们就可以通过脚本+sql语句来监控oracle的表空间。下面我分别说下监控oracle告警日志和表空间的方法。
监控oracle告警日志的方法:

1.创建profile文件。
vim /etc/oracle.profile

#######################################################################
## oracle.profile ##
#######################################################################
EDITOR=vi;export EDITOR
ORACLE_BASE=/u01/app/oracle; export
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib64:/usr/lib64; export
LD_LIBRARY_PATH TNS_ADMIN=$ORACLE_HOME/network/admin;export
TNS_ADMIN NLS_LANG='American_China.ZHS16GBK'; export
NLS_LANG NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'; export
NLS_DATE_FORMAT RATAB=/etc/oratab;export
#ORATAB PATH=$PATH:$ORACLE_HOME:$ORACLE_HOME/bin:/usr/ccs/bin:/bin:/usr/bin:/usr/sbin:/
#sbin:/usr/openwin/bin:/opt/bin:.; export
PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin
DBALIST="xujinhua@uniits.com,xujinhua@cbc.cn";export DBALIST
2. 编写检查oracle alter日志脚本(oracle用户)
#!/bin/ksh
source /etc/oracle.profile
#for SID in `cat $ORACLE_HOME/sidlist`
for SID in 'orcl'
do
cd /u01/app/oracle/diag/rdbms/orcl/orcl/trace
if [ -f alert_${SID}.log ]
then
mv alert_${SID}.log alert_work.log
touch alert_${SID}.log
cat alert_work.log >> alert_${SID}.hist
grep ORA- alert_work.log > alert.err
fi
if [ `cat alert.err|wc -l` -gt 0 ]
then
mailx -s "mobile-testdb${SID} ORACLE ALERT ERRORS" $DBALIST < alert.err
fi
rm -f alert.err
rm -f alert_work.log
done
3.oracle用户下使用crontab定期运行检查oracle alter日志的脚本,即可。

监控表空间的方法:
由于现在表空间都使用自动扩展模式,在规划数据库的时候,都是根据业务一段时间运行的数据量作参考规划数据文件的大小,从而决定数据文件的个数以及初始每个数据文件的初始大小和每次扩展的大小。那么咱们要监控表空间的利用率是没意义的,因为运行数据增长一段时间就会达到初始设置的大小,此时就会触发报警表空间不足,但是事实上它会自动扩展。但是也不能说就不监控了,咱们可以定期了解表空间的使用情况,看跟咱们预估的数据文件的大小有多少,这样也能起到监控表空间的效果。 【帮客之家 http://www.bkjia.com 】

1)编写如下脚本:
[root@woodpecker oracle]# cat tbs_monitor.sh
#!/bin/sh
#this is a script. of monitor
#login
su - oracle -c "sqlplus / as sysdba" <<EOF

start /home/oracle/tb_check/spool.sql
exit;
EOF
#out
export ORACLE_SID=orcl
export TODAY=`date '+%Y%m%d'`
MONITOR=monitor$TODAY.lst
#mail for user
mail -s "$ORACLE_SID TABLESPACE $MONITOR" xujinhua@uniits.com < $MONITOR -- -f xujinhua@uniits.com

2)编写如下sql:
[root@woodpecker oracle]# cat /home/oracle/tb_check/spool.sql
spool on;
set echo off
set feedback off;
set termout off;
set heading on;
set term off
column dat new_value date;
select to_char(sysdate,'yyyymmdd') dat from dual;
spool monitor&&date;

set linesize 80;
select d.tablespace_name,space sum_space,
       space-nvl(free_space,0) used_space,
       round((1-nvl(free_space,0)/space)*100,2) used_rate,
       free_space free_space
      from (select tablespace_name,
                   round(sum(bytes)/(1024*1024),2) space,
                   sum(blocks) blocks
           from dba_data_files
                  group by tablespace_name) d,
           (select tablespace_name,
                  round(sum(bytes)/(1024*1024),2) free_space
           from dba_free_space
                  group by tablespace_name) f
           where d.tablespace_name = f.tablespace_name(+);

spool off;
exit;

3)通过系统的crontab定时每天调度一次脚本即可每天告诉给dba数据库的所有表空间的使用情况。

相关内容