oracle表空间满的危害以及处理方式见我的博客链接 https://www.cnblogs.com/-abm/p/9764803.html
除此之外我们还需要对表空间实时监控,这样就可以及时了解表空间的使用状况,防患于未然。
监控工具
nagios(nagios的工作原理需要清晰,这里不做介绍)
nagios自带了oracle监控相关脚本,查看它的帮助的命令如下:
# /usr/local/nagios/libexec/check_oracle -h
Usage: check_oracle --tns <Oracle Sid or Hostname/IP address> check_oracle --db <ORACLE_SID> check_oracle --login <ORACLE_SID> check_oracle --connect <ORACLE_SID> check_oracle --cache <ORACLE_SID> <USER> <PASS> <CRITICAL> <WARNING> check_oracle --tablespace <ORACLE_SID> <USER> <PASS> <TABLESPACE> <CRITICAL> <WARNING> check_oracle --oranames <Hostname> check_oracle --help check_oracle --version
开始配置监控
2.1、按照命令帮助中的提示,测试nagios 监控oracle表空间
格式:check_oracle --tablespace <ORACLE_SID> <USER> <PASS> <TABLESPACE> <CRITICAL> <WARNING>
最好先在命令行下实验脚本的正确性,以及结果的准确度
举例有问题的情况: # /usr/local/nagios/libexec/check_oracle --tablespace orcl sys mima users 98 95 CRITICAL - ORA-28009: ??? SYSDBA ??? SYSOPER ???? SYS ??
//报错提示:用sys用户登录必须要加as sysdba,所以我自己查看了nagios的监控脚本并修改了部分内容(修改内容见最后),然后正常执行了。
正常执行
# /usr/local/nagios/libexec/check_oracle --tablespace pdb_xxx sys mima USERS 90 80;
pdb_shwjs : USERS CRITICAL - 95.30% used [ 12613 / 268144 MB available ]|USERS=95.30%;80;90;0;100
2.2、加入到监控配置文件中
# vim /usr/local/nagios/etc/nrpe.cfg,加入监控内容条目
...... #check oracle_tablespace command[check_oracle_tab]=/usr/local/nagios/libexec/check_oracle --tablespace pdb_shwjs sys SHipii314 USERS 98 97
//这里的check_oracle_tab是用于服务端调用的标识符
配置完成重启客户端nrpe,使监控项目生效
# service xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
2.3、配置服务端
服务端先用命令行测试
# ../libexec/check_nrpe -H 192.168.13.103 -c check_oracle_tab pdb_shwjs : USERS OK - 95.30% used [ 12613 / 268144 MB available ]|USERS=95.30%;97;98;0;100
测试没有问题,写到监控主机的服务配置文件中
# vim services/192.168.13.103.cfg
# 监控oracle_tablespace define service{ service_description check_oracle_tab ; 定义服务名称(WEB管理台显示的服务标识) host_name 192.168.13.103 ; 关联的主机名称(引用主机.cfg配置) check_command check_nrpe!check_oracle_tab ; 执行的监控命令(引用被控端nrpe.cfg配置) check_period 7x24h ; 监控服务的时间段(引用timeperiods.cfg配置) normal_check_interval 1 ; 监控检查服务时间间隔(单位/分钟) retry_check_interval 1 ; 非OK状态重新检查时间间隔(单位/分钟) max_check_attempts 2 ; 非OK状态重新检查最大次数(达到阀值将触发通知功能) notifications_enabled 1 ; 是否启用通知功能(1是/0否) contact_groups gnnt-admins ; 通知发送对象(引用contacts.cfg配置) notification_options w,u,c,r ; 通知类型(warning、unknown、critical、recovery) notification_interval 10 ; 重发通知的时间间隔(单位/分钟) notification_period 7x24h ; 允许发送通知的时间段(引用timeperiods.cfg配置) active_checks_enabled 1 ; 是否启用主动式服务检查(1是/0否) passive_checks_enabled 1 ; 是否启用被动式服务检查(1是/0否) parallelize_check 1 ; 是否启用并行主动服务检查(禁用可能会带来重大性能问题) obsess_over_service 1 ; 是否保持监控该服务(1是/0否) event_handler_enabled 1 ; 是否启用事件处理程序(1是/0否) process_perf_data 1 ; 是否启用过程性能数据功能(1是/0否) flap_detection_enabled 0 ; 是否否启用Flap检测功能(1是/0否) retain_status_information 0 ; 是否保留整个程序重新启动的状态信息(1是/0否) retain_nonstatus_information 0 ; 是否保留整个程序重新启动非状态信息(1是/0否) }
重新加载nagios
# service nagios reload
Running configuration check...
Reloading nagios configuration...
done
监控效果
附:
nagios监控oracle的脚本修改
262 --tablespace) 263 if [ ${6} -lt ${7} ] ; then 264 echo "UNKNOWN - Warning level is more then Crit" 265 exit $STATE_UNKNOWN 266 fi 267 result=`sqlplus -s ${3}/${4}@192.168.13.105:1521/${2} as sysdba << EOF