使用zabbix自动发现规则监控oracle分区表的分区键的合法

news2024/12/26 0:02:32

一、 创建从数据库查询原始数据脚本

  1. 编写脚本query_table.sh

vim query_table.sh

#!/bin/bash
temp_outfile="/tmp/table.source"
outfile="/tmp/table.txt"
source /home/oracle/.bash_profile

sqlplus -s zabbix/zabbix>${temp_outfile}<<EOF
col table_owner for a10
col table_name for a10
col partition_name for a10
col high_value for a150
set long 999999
set linesize 200
set pagesize 10000
set heading off
set feedback off
set termout off
set echo off
select rn,table_owner,table_name,partition_name,high_value from 
(select table_owner,table_name,partition_name,high_value,row_number()over(partition by table_owner,table_name order by partition_position desc) as rn from dba_tab_partitions where interval<>'YES' and table_owner not in ('SYS','SYSTEM','AUDSYS','MDSYS'))
where rn<3 order by 2,3,1;
quit;
EOF

sed -i '/^$/d' $temp_outfile

function high_value_convert(){
if [[ "$1" =~ [0-9]+-[0-9]+-[0-9]+  ]];then
 echo  $(echo "$1"|perl -pe "s/.*?([0-9]+)-([0-9]+)-([0-9]+).*/\1\2/")
elif [[ "$1" =~ [0-9]{8} ]]||[[ "$1" =~ [0-9]{6} ]];then
 echo $(echo "$1"|perl -pe "s/.*?([0-9]{6}).*/\1/")
fi
}

function get_result(){
current_date=$(date '+%Y%m')
if [ $(high_value_convert "$var_high_value") -le "$current_date" ];then
echo $line
fi
}


flag_id=0
while read line 
do
var_high_value=$(echo $line|awk '{for(i=5;i<=NF;i++){if(i<NF){printf $i}else{print $i}}}')
var_rn=$(echo $line|awk '{print $1}')
if [[ "$var_high_value" == "MAXVALUE" ]];then
flag_id=$((flag_id+1))
continue
elif [[ "$var_high_value" != "MAXVALUE" ]]&&[[ "$var_rn" == "1" ]];then
get_result 
elif [[ "$var_high_value" != "MAXVALUE" ]]&&[[ "$var_rn" == "2" ]]&&[[ "$flag_id" == "1" ]];then
get_result
flag_id=$((flag_id-1))
fi
done<$temp_outfile>$outfile

rm -fr $temp_outfile

sed -i 's/^[1-2]//' $outfile

chmod a+x /home/oracle/shellscripts/query_table.sh

  1. 脚本执行后的截图
    在这里插入图片描述

  2. 将脚本添加到crontab中
    crontabl -e

*/1 * * * * /home/oracle/shellscripts/query_table.sh > /home/oracle/shellscripts/oracle_cron.sh.log 2>&1

二、 创建自定义发现规则脚本

创建生成json数据的脚本
vim /etc/zabbix/scripts/oracle_discovery_partition.sh

#!/bin/bash
table_name=(`cat /tmp/table.txt|awk '{print $1"."$2}'`)
length=${#table_name[@]}
 
printf "{\n"
printf '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
    printf "\n\t\t{"
    printf "\"{#TABLE_NAME}\":\"${table_name[$i]}\"}"
    if [ $i -lt $[$length-1] ];then
        printf ","
    fi
done
    printf "\n\t]\n"
printf "}\n"

chmod a+x /etc/zabbix/scripts/oracle_discovery_partition.sh
执行结果如图
在这里插入图片描述

三、 创建自定义监控原型脚本

vim /etc/zabbix/scripts/oracle_check_partition.sh

#!/bin/bash
TABLE_NAME="$1"
table_owner=${TABLE_NAME%.*}
table_name=${TABLE_NAME#*.}
SOURCE_DATA=/tmp/table.txt
grep "\b${table_owner}\b" ${SOURCE_DATA} |grep "\b${table_name}\b"

chmod a+x /etc/zabbix/scripts/oracle_check_partition.sh
测试脚本

四、 配置zabbix agent端

vim /etc/zabbix/zabbix_agentd.d/userparameter_oracle.conf

UserParameter=table.discovery,/etc/zabbix/scripts/oracle_discovery_partition.sh
UserParameter=table.check[*],/etc/zabbix/scripts/oracle_check_partition.sh "$1"

重启agent服务
systemctl restart zabbix-agent

在zabbix server端测试键值配置是否正确

zabbix_get -s 192.168.1.137 -k "table.discovery"
 
zabbix_get -s 192.168.1.137 -k "table.check[TXB.T01]"

在这里插入图片描述
在这里插入图片描述

五、 在zabbix中web界面配置

  1. 在被监控的主机中创建自动发现规则
    在这里插入图片描述

  2. 在自动发现规则下创建监控原型
    在这里插入图片描述

  3. 在监视中查看最新数据展示

在这里插入图片描述

六、 oracle分区表测试数据模版

select owner,table_name from dba_tables where owner='TXB';
select 'drop table '||owner||'.'||table_name||';' from dba_tables where owner='TXB';

当分区键是日期类型时候
create table txb.t01
(
    id integer primary key,
    retail_date date,
    ware_name varchar2(50)
)
partition by range(retail_date)
(
   partition par_01 values less than(to_date('2024-01-01','yyyy-mm-dd')) tablespace USERS,
   partition par_02 values less than(to_date('2024-02-01','yyyy-mm-dd')) tablespace USERS
);

create table txb.t02
(
    id integer primary key,
    retail_date date,
    ware_name varchar2(50)
)
partition by range(retail_date)
(
   partition par_01 values less than(to_date('2024-01-01','yyyy-mm-dd')) tablespace USERS,
   partition par_02 values less than(to_date('2024-04-01','yyyy-mm-dd')) tablespace USERS
);

create table txb.t03
(
    id integer primary key,
    retail_date date,
    ware_name varchar2(50)
)
partition by range(retail_date)
(
   partition par_01 values less than(to_date('2024-01-01','yyyy-mm-dd')) tablespace USERS,
   partition par_02 values less than(to_date('2024-03-01','yyyy-mm-dd')) tablespace USERS,
   partition par_03 values less than (maxvalue) tablespace USERS
);

create table txb.t04
(
    id integer primary key,
    retail_date date,
    ware_name varchar2(50)
)
partition by range(retail_date)
(
   partition par_01 values less than(to_date('2024-01-01','yyyy-mm-dd')) tablespace USERS,
   partition par_02 values less than(to_date('2024-05-01','yyyy-mm-dd')) tablespace USERS,
   partition par_03 values less than (maxvalue) tablespace USERS
);

create table txb.t05
(
    id integer primary key,
    retail_date date,
    ware_name varchar2(50)
)
partition by range(retail_date)
(
   partition par_01 values less than(to_date('20240201','YYYYMMDD')) tablespace USERS,
   partition par_02 values less than(to_date('20240301','YYYYMMDD')) tablespace USERS
);

范围分区分区键数据类型是数字
create table txb.t06
(
    id integer primary key,
    retail_date number,
    ware_name varchar2(50)
)
partition by range(retail_date)
(
   partition par_01 values less than(20240101) tablespace USERS,
   partition par_02 values less than(20240301) tablespace USERS
);

create table txb.t07
(
    id integer primary key,
    retail_date number,
    ware_name varchar2(50)
)
partition by range(retail_date)
(
   partition par_01 values less than(20240101) tablespace USERS,
   partition par_02 values less than(20240401) tablespace USERS
);

当分区键的数据类型是字符串的时候
create table txb.t08
(
    id integer primary key,
    retail_date varchar2(50),
    ware_name varchar2(50)
)
partition by range(retail_date)
(
   partition par_01 values less than('20240101') tablespace USERS,
   partition par_02 values less than('20240301') tablespace USERS
);

create table txb.t09
(
    id integer primary key,
    retail_date varchar2(50),
    ware_name varchar2(50)
)
partition by range(retail_date)
(
   partition par_01 values less than('20240101') tablespace USERS,
   partition par_02 values less than('20240328') tablespace USERS
);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1543437.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hive SQL必刷练习题:留存率问题(*****)

留存率&#xff1a; 首次登录算作当天新增&#xff0c;第二天也登录了算作一日留存。可以理解为&#xff0c;在10月1号登陆了。在10月2号也登陆了&#xff0c;那这个人就可以算是在1号留存 今日留存率 &#xff08;今日登录且明天也登录的用户数&#xff09; / 今日登录的总…

Redis入门到实战-第十一弹

Redis实战热身Bitmaps篇 完整命令参考官网 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是一个开源的&#xff08;采用BSD许可证&#xff09;&#xff0c;用作数据库、缓存、消息代理和…

Spring boot2.7整合jetcache方法缓存 设置定时刷新 解决多系统同时操作数据问题

上文 Spring boot2.7整合jetcache方法缓存 处理数据发生变化时同步更新缓存 删除缓存操作 解决了 缓存更新的问题 但是 现在有个问题 例如 我们 A系统 和 B系统 同时缓存了这一组数据 但是 A系统数据发生了更新 但是 B系统并不知道 其实 也没有特别好的办法同步通知 但可以控…

复旦大学EMBA肖仰华:人类文明或许将因为AI迎来一段“盘整期”

“君子知道”复旦大学EMBA前沿论坛上&#xff0c;复旦大学计算机学院肖仰华教授曾为企业家同学进行过主题分享。他认为&#xff0c;Sora只是开始&#xff0c;AI或让人类文明进入“盘整期”。      在人工智能的浩瀚世界中&#xff0c;Sora也只是冰山一角。当AI技术“高歌猛…

网约车APP小程序源码代驾顺风拼车货运司乘端安卓苹果源码可二开

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 一、详细介绍 系统是基于Thinkphpuniapp开发的&#xff0c;全开源未加密&#xff0c;这套源码可以拿回去自己做二开 后台用户端司机端 功能详情介绍&#xff1a; 车主实名认证&#xff0c;驾驶证认证&#xff0c;车…

Pycharm服务器配置python解释器并结合内网穿透实现公网远程开发

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

网络——套接字编程UDP

目录 端口号 源端口号和目的端口号 认识TCP协议和UDP协议 网络字节序 socket编程接口 socket常见接口 sockaddr结构 UDP socket bind recvfrom sendto 编写客户端 绑定INADDR_ANY 实现聊天功能 端口号 在这之前我们已经说过源IP地址和目的IP地址&#xff0c;还有…

STM32学习笔记(6_4)- TIM定时器的输出比较和PWM代码

无人问津也好&#xff0c;技不如人也罢&#xff0c;都应静下心来&#xff0c;去做该做的事。 最近在学STM32&#xff0c;所以也开贴记录一下主要内容&#xff0c;省的过目即忘。视频教程为江科大&#xff08;改名江协科技&#xff09;&#xff0c;网站jiangxiekeji.com 现在开…

ssm002学院党员管理系统+jsp

鄂尔多斯应用技术学院党员管理系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对鄂尔多斯应用技术学…

UE5C++学习(四)--- SaveGame类存储和加载数据

上一篇说到使用数据表读取数据&#xff0c;如果我开始玩游戏之后&#xff0c;被怪物打了失去了一部分血量&#xff0c;这个时候我想退出游戏&#xff0c;当我再次进入的时候&#xff0c;希望仍然保持被怪物打之后的血量&#xff0c;而不是重新读取了数据表&#xff0c;这个时候…

$.when.apply($, deferreds).done(function() {}) 用法

$.when.apply($, deferreds).done(function() {}) 这行代码是 jQuery 中用于处理多个异步操作的一种模式。让我们逐步解释其用法&#xff1a; $.when(): 这是 jQuery 中的一个方法&#xff0c;用于创建一个新的 Deferred&#xff08;延迟&#xff09;对象。Deferred 对象用于管…

4.1.1 SN74LVC245A型总线收发器

SN74LVC245A是德州仪器(Texas Instruments)推出的一款集成电路芯片,属于SN74系列。它是一款双向总线驱动器,可用于高速CMOS逻辑电平之间的电平转换。这款芯片可以实现3.3V/5V逻辑电平之间的转换,具有高速和低功耗的特点。SN74LVC245A在电子系统中常用于数据总线的电平转换…

学习要不畏难

我突然发现&#xff0c;畏难心是阻碍我成长的最大敌人。事未难&#xff0c;心先难&#xff0c;心比事都难&#xff0c;是我最大的毛病。然而一念由心生&#xff0c;心不难时&#xff0c;则真难事也不再难。很多那些自认为很难的事&#xff0c;硬着头皮做下来的时候&#xff0c;…

ETF细分,一文看懂(一)

很多朋友现在都喜欢交流ETF&#xff0c;但是ETF里面细分了很多&#xff0c;有T0的也有T1的。费用很多也不一样&#xff0c;今天我们详细说说ETF的分类&#xff0c;给大家一个明细。 ETF就是交易型开放式指数基金。它结合了开放式基金和封闭式基金的技术特点&#xff0c;是一…

TSINGSEE青犀智慧充电桩消防安全烟雾火焰AI算法识别预警方案

一、方案背景 随着AI人工智能、大数据、云计算等技术快速发展与落地&#xff0c;视频智能分析技术在智慧充电桩场景中的应用也越来越广泛。这种技术能够为充电桩站点提供全方位的监控和管理&#xff0c;提高运营效率&#xff0c;保障充电站设备的安全和稳定运行。 通过TSINGS…

Godot 学习笔记(5):彻底的项目工程化,解决GodotProjectDir is null+工程化范例

文章目录 前言GodotProjectDir is null解决方法解决警告问题根本解决代码问题测试引用其实其它库的输出路径无所谓。 工程化范例环境命名规范Nuget项目结构架构代码ISceneModelIOC服务 测试GD_Extension 通用扩展TestUtils GD_ProgramTestServiceMainSceneModel Godot对应的脚本…

学习鸿蒙基础(7)

一、Watch状态变量更改通知 Watch应用于对状态变量的监听。如果开发者需要关注某个状态变量的值是否改变&#xff0c;可以使用Watch为状态变量设置回调函数。 1、装饰器参数&#xff1a;必填。常量字符串&#xff0c;字符串需要有引号。是(string)> void自定义成员函数的方法…

为什么电商系统一定要跟企业ERP做数据对接?

一篇文章告诉你&#xff0c;为什么电商系统一定要跟企业ERP做数据对接&#xff1f; 在电商日益发展的情况下&#xff0c;每个电商企业的单量越来越大。但是电商系统对于财务来说并不友好&#xff0c;所以企业会另外上一套财务系统方便财务做账和企业内部管理。那如果还是按照之…

vue2 和 vue3 配置路由有什么区别

vue2 和 vue3 配置路由有什么区别 初始化路由器实例&#xff1a;注入到应用中&#xff1a;动态路由参数和捕获所有路由&#xff1a;编程式导航 API&#xff1a;异步加载组件&#xff1a; vue2 如何 使用路由 第一步&#xff1a;安装 vue-router第二步&#xff1a;创建路由组件第…

Java 基础知识- 创建线程的几种方式

大家好我是苏麟 , 今天聊聊创建线程的几种方式 . 创建线程的几种方式 1. 继承Thread类实现多线程 /*** className: ThreadTest* author: SL 苏麟**/ public class ThreadTest extends Thread{public static void main(String[] args) {ThreadTest threadTest new ThreadTes…