Zabbix+Orabbix监控oracle数据库表空间
Orabbix 是设计用来为 zabbix 监控 Oracle 数据库的插件,它提供多层次的监控,包括可用性和服务器性能指标。
它提供了从众多 oracle 实例采集数据的有效机制,进而提供此信息的监控和性能指标。然后,您可以利用的 zabbix 的报告功能为收集的所有数据,并提供分析。目前的发行版中包含了一组预先定义的模板,包括从初始部署警报和图形功能。然而,这些可以进行微调,以满足您的需求和数据/监控要求
一简介
系统环境:
Linux Centos 7.4
3.10.0-693.21.1.el7.x86_64
Zabbix版本:zabbix 3.4.7
Orabbix 监控什么?
数据库版本
归档日志与生产趋势分析
触发器,表/过程等命中率
逻辑 I/O 性能
物理 I/O 性能
PGA
SGA
共享池
Sessions
数据库大小
表空间
Orabbix
二、zabbix server 端操作
需要安装在同构通信、远程Orabbix的server上
01 下载安装Orabbix
http://www.smartmarmot.com/product/orabbix/download/
云盘链接:
https://pan.baidu.com/s/1Q9ktCS3mHUdqL7IPShNVGQ
1.1 创建目录
mkdir -p /opt/orabbix
mv orabbix-1.2.3.zip /opt/orabbix
cd /opt/orabbix
1.2 解压orabbix
unzip orabbix-1.2.3.zip
1.3 创建orabbix备份
cp conf/config.props.sample conf/config.props
1.4 启动程序拷贝至/etx/init.d/
cp init.d/orabbix /etc/init.d/
1.5 分配权限
chmod +x /etc/init.d/orabbix
chmod +x /opt/orabbix/run.sh
1.6 安装jdk
yum install java -y
02 创建数据库账号
oracle 服务器端操作
登录 oracle
su - oracle # 切换到 oracle 用户
sqlplus /nolog # 不连接任何数据库
conn /as sysdba # 用sysdba 登陆
或
conn 用户名/密码
select instance_name from v$instance; # 查看实例
2.1 创建Oracle账号
首先我们需要在被监控的Oracle上面创建一个账号,用于zabbix的数据获取,在oracle的sqlplus里面执行
CREATE USER ZABBIX
IDENTIFIED BY "zabbix"
DEFAULT TABLESPACE SYSTEM
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK;
2.2 赋予角色权限
GRANT CONNECT TO ZABBIX;
GRANT RESOURCE TO ZABBIX;
ALTER USER ZABBIX DEFAULT ROLE ALL;
2.3 赋予系统权限
GRANT CREATE SESSION TO ZABBIX;
GRANT SELECT ANY DICTIONARY TO ZABBIX;
GRANT UNLIMITED TABLESPACE TO ZABBIX;
GRANT SELECT ANY DICTIONARY TO ZABBIX;
2.4 如果我们的数据库是Oracle 11g,我们还需要执行下面的语句
注释:官方文档是需要执行这个语句的,测试没有执行也一样可以用,目前没有发现问题(可参考)
exec dbms_network_acl_admin.create_acl(acl => 'resolve.xml',description => 'resolve acl', principal =>'ZABBIX', is_grant => true, privilege => 'resolve');
exec dbms_network_acl_admin.assign_acl(acl => 'resolve.xml', host =>'*');
commit;
点击查看官网文档
03 修改配置文件
编辑刚刚生成的config.props文件
zabbix server 端操作
vim /opt/orabbix/conf/config.props
## 修改后内容如下 ##
#comma separed list of Zabbix servers
ZabbixServerList=ZabbixServer
ZabbixServer.Address=192.168.2.145 #zabbix server IP地址
ZabbixServer.Port=10051 #端口
ZabbixServer2.Address=IP_ADDRESS_OF_ZABBIX_SERVER
ZabbixServer2.Port=PORT_OF_ZABBIX_SERVER #pidFile
OrabbixDaemon.PidFile=./logs/orabbix.pid
#frequency of item's refresh
OrabbixDaemon.Sleep=300
#MaxThreadNumber should be >= than the number of your databases
OrabbixDaemon.MaxThreadNumber=100 #put here your databases in a comma separated list
DatabaseList=192.168.2.142 #名称与该机在 zabbix中监控的主机名称保持一致 #Configuration of Connection pool
#if not specified Orabbis is going to use default values (hardcoded)
#Maximum number of active connection inside pool DatabaseList.MaxActive=10
#The maximum number of milliseconds that the pool will wait
#(when there are no available connections) for a connection to be returned
#before throwing an exception, or <= 0 to wait indefinitely.
DatabaseList.MaxWait=100
DatabaseList.MaxIdle=1 #define here your connection string for each database
192.168.2.142.Url=jdbc:oracle:thin:@192.168.2.142:1521:orcl # 需要 jdk 环境,因为这里是通过 JDBC 连接的,
#orcl 为数据库实例名称
192.168.2.142.User=ZABBIX # 用来监控 oracle 数据库的用户名和密码,需要在 oracle 中创建并赋予一定的权限
192.168.2.142.Password=ZABBIX
#Those values are optionals if not specified Orabbix is going to use the general values
192.168.2.142.MaxActive=10
192.168.2.142.MaxWait=100
192.168.2.142.MaxIdle=1
192.168.2.142.QueryListFile=./conf/query.props
#DB2.Url=jdbc:oracle:thin:@server2.domain.example.com:<LISTENER_PORT>:DB2
#DB2.User=zabbix
#DB2.Password=zabbix_password
#DB2.QueryListFile=./conf/query.props
#DB3.Url=jdbc:oracle:thin:@server3.domain.example.com:<LISTENER_PORT>:DB3 #DB3.User=zabbix
#DB3.Password=zabbix_password
#DB3.QueryListFile=./conf/query.props
注:
以上端口号为与Zabbix Server通讯的端口,我这里是将Orabbix与Zabbix server 装在同一台机器上的,如果不在同一台机器,那装Orabbix的机器需要先装Zabbix Agent,否则数据将无法传送到Zabbix Server。
注:
ZabbixServerList:可以设置多个,用","进行分割;
DatabaseList:可以设置多个被监控的Oracle数据库服务器,用","进行分割,该名称要和zabbix server界面中的Host name保持一致,该配置文件中后续所引用的设定都以该名称为准。
关于JDBC 可参考:
Oracle = jdbc:oracle:thin:@<host>:<LISTENER_PORT>:<instance>
PostgreSQL = jdbc:postgresql://<host>:<port>/<database>
MS Sql Server = jdbc:jtds:sqlserver://<host>:<port>/<instancename>
MySQL Server = jdbc:mysql://[host:port],[host:port].../[database]
DB2 = jdbc:db2://<servername>:<port>/<installation>
启动服务 /etc/init.d/orabbix start 或 systemctl start orabbix


三、zabbix web 端操作
01 导入模板
模板在/opt/orabbix/template/ 目录下面,全部导入zabbix web 即可

02 添加主机
03.添加oracle 模板
四、验证
五、监控库的大小
01.配置query.props
cp /opt/orabbix/conf/query.props /opt/orabbix/conf/query.props.bak
vi /opt/orabbix/conf/query.props
在QueryList=类目下增加dbfilesize,dbsize,如图所示
02.然后在该文件的末尾添加
dbfilesize.Query=select to_char(sum(bytes/1024/1024/10), 'FM99999999999999990') retvalue from dba_data_files
dbsize.Query=SELECT to_char(sum( NVL(a.bytes/1024/1024/10 - NVL(f.bytes/1024/1024/10, 0), 0)), 'FM99999999999999990') retvalue \
FROM sys.dba_tablespaces d, \
(select tablespace_name, sum(bytes) bytes from dba_data_files group by tablespace_name) a, \
(select tablespace_name, sum(bytes) bytes from dba_free_space group by tablespace_name) f \
WHERE d.tablespace_name = a.tablespace_name(+) AND d.tablespace_name = f.tablespace_name(+) \
AND NOT (d.extent_management like 'LOCAL' AND d.contents like 'TEMPORARY')
用以定义查询dbfilesize,dbsize的SQL语句
03.添加内容如图所示
04.查看日志看是否有报错
六、表空间监控的优化
01、自定义SQL检查
vim /opt/orabbix/conf/query.props tbl_space.Query=SELECT * FROM ( \
select '- Tablespace ->',t.tablespace_name ktablespace, \
'- Type->',substr(t.contents, 1, 1) tipo, \
'- Used(MB)->',trunc((d.tbs_size-nvl(s.free_space, 0))/1024/1024) ktbs_em_uso, \
'- ActualSize(MB)->',trunc(d.tbs_size/1024/1024) ktbs_size, \
'- MaxSize(MB)->',trunc(d.tbs_maxsize/1024/1024) ktbs_maxsize, \
'- FreeSpace(MB)->',trunc(nvl(s.free_space, 0)/1024/1024) kfree_space, \
'- Space->',trunc((d.tbs_maxsize - d.tbs_size + nvl(s.free_space, 0))/1024/1024) kspace, \
'- Perc->',decode(d.tbs_maxsize, 0, 0, trunc((d.tbs_size-nvl(s.free_space, 0))*100/d.tbs_maxsize)) kperc \
from \
( select SUM(bytes) tbs_size, \
SUM(decode(sign(maxbytes - bytes), -1, bytes, maxbytes)) tbs_maxsize, tablespace_name tablespace \
from ( select nvl(bytes, 0) bytes, nvl(maxbytes, 0) maxbytes, tablespace_name \
from dba_data_files \
union all \
select nvl(bytes, 0) bytes, nvl(maxbytes, 0) maxbytes, tablespace_name \
from dba_temp_files \
) \
group by tablespace_name \
) d, \
( select SUM(bytes) free_space, \
tablespace_name tablespace \
from dba_free_space \
group by tablespace_name \
) s, \
dba_tablespaces t \
where t.tablespace_name = d.tablespace(+) and \
t.tablespace_name = s.tablespace(+) \
order by 8) \
where kperc > 93 \
and tipo <>'T' \
and tipo <>'U'
tbl_space.NoDataFound=none
02、测试
官方文档
http://www.smartmarmot.com/wiki/index.php/Orabbix
Zabbix+Orabbix监控oracle数据库表空间的更多相关文章
- oracle数据库表空间追加数据库文件方法
oracle数据库表空间追加数据库文件方法 针对非大文件方式表空间,允许追加文件进行表空间的扩展,单个文件最大大小是32G 第一种方式:表空间增加数据文件 www.2cto.com 1 ...
- Oracle数据库表空间与数据文件的关系描述正确的是( )
Oracle数据库表空间与数据文件的关系描述正确的是( ) A.一个表空间只能对应一个数据文件 B.一个表空间可以对应多个数据文件 C.一个数据文件可以对应多个表空间 D.表空间与数据文件没任何对应关 ...
- Oracle数据库表空间与用户的关系是 ( )
Oracle数据库表空间与用户的关系是 ( )? A.一对一 B.一对多 C.多对一 D.多对多 解答: D 一个用户可以使用一个或多个表空间,一个表空间也可以供多个用户使用.
- 查看Oracle数据库表空间大小(空闲、已使用),是否要增加表空间的数据文件
查看Oracle数据库表空间大小(空闲.已使用),是否要增加表空间的数据文件 1.查看表空间已经使用的百分比 Sql代码 select a.tablespace_name,a.bytes/1024/1 ...
- 创建oracle数据库表空间并分配用户
我们在本地的oracle上或者virtualbox的oracle上 创建新的数据库表空间操作:通过system账号来创建并授权/*--创建表空间create tablespace YUJKDATAda ...
- Zabbix通过Orabbix监控Oracle数据库
一.背景 公司业务使用的是一直Oracle数据库,因为多次出现表空间满的时候不能及时发现,每次都是业务组的人员通知处理,这样下来DBA这边就比较被动,所以老大要求监控表空间剩余大小并且当剩余过小时能够 ...
- oracle数据库表空间扩容方法
1. 先查询表空间在物理磁盘上存放的位置,注意使用sysdba的账号登陆. SELECT tablespace_name, file_id, file_name, ), ) total_space F ...
- oracle数据库表空间及归档
--表空间(TableSpace)是Oracle的开创性理念.表空间使得数据库管理更加灵活,而且极大地提高了数据库性能. --作用 :1.避免磁盘空间突然耗竭的风险 2.规划数据更灵活 3.提高数据库 ...
- 新建oracle数据库表空间及删除表空间和用户
进入oracle的命令控制台,按具体情况执行以下命令: sqlplus 默认数据库普通用户登录sqlplus / as sysdba 默认数据库管理员登录sqlplus username/passwo ...
随机推荐
- java基础序--列化和反序列化
一.什么是序列化和反序列化: 序列化:是指把java堆内存中的对象转换成字节(二进制流)的过程.也就是通过某种方式将java对象存储在磁盘内存中,这个过程称为序列化 反序列化:是把磁盘上的对象转恢复成 ...
- 00005-js 获取uuid
admin.guid = function () { function S4() { return (((1+Math.random())*0x10000)|0).toString(16).subst ...
- 搞懂:MVVM模型以及VUE中的数据绑定数据劫持发布订阅模式
搞懂:MVVM模式和Vue中的MVVM模式 MVVM MVVM : model - view - viewmodel的缩写,说都能直接说出来 model:模型,view:视图,view-Model:视 ...
- React面试题汇总
1.如何理解React中的组件间数据传递? ①父-子 通过props传递 ②子-父 在父中创建一个可以修改state的方法,之后把这个方法通过props传递给子,在子中调用这个方法 从而达到修改父 ...
- Spring注入的对象到底是什么类型
开篇 之前,在用spring编码调试的时候,有时候发现被自动注入的对象是原始类的对象,有时候是代理类的对象,那什么时候注入的原始类对象呢,有什么时候注入的是代理类的对象呢?心里就留下了这个疑问.后来再 ...
- A+B Coming(hdu1720)
思考:十六进制的输入->%x,定义时用int.要变成十进制输出,直接在输出时用->%d. #include<stdio.h> int main() { int A,B; cha ...
- Lodash工具库中cloneDeep深拷贝的使用
在vue向数据库提交数据的过程中,可能需要处理某些数据,比如有以下要求:传递的参数必须是以逗号分隔的分类列表 但此时如果vue组件中的数据却是数组形式的这个时候需要用到数组的 join 方法对数据进行 ...
- (一) Vue在创建的时候 入口文件 及相关的路由配置(及子路由配置)
1. 首先明确一点 在书写之前尽量保持相关的文件知道含义 比如 components 啥的 知道是要放什么东西 在这里介绍一下 由于 vue 不是系统学习 所以很多的创建方式可能不一样 就是有 ...
- 解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
一.问题 有时候我们登录Mysql输入密码的时候,会出现这种情况 mysql -u root -p Enter Password > '密码' 错误:ERROR 1045 (28000): Ac ...
- mysql 的大文本存储TEXT & BLOB
TEXT & BLOB 一般在保存少量字符串的时候,我们会选择 CHAR 或者 VARCHAR:而在保存较大文本时,通常会选择使用 TEXT 或者 BLOB,二者之间的主要差别是 BLOB 能 ...