IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> shell连接Oracle 监控表数据实时性 -> 正文阅读

[大数据]shell连接Oracle 监控表数据实时性

背景:最近工作中需要抽取一部分社会数据到数据库,但有时候方案或者程序报错导致数据未及时抽取到数据库,于是想到利用shell脚本通过定时任务来监控数据的及时性。

定义:将表中最大的抽取时间与当前时间进行比对,如果超过2两小时(代表2小时内都没新数据抽取入库)则判定为数据延迟,而这2小时表示我可以容忍的延迟范围

必要条件

shell连接oracle:安装oracle客户端工具oracle-instantclient-basicoracle-instantclient-sqlplus

下载地址:

csdn付费地址(rpm形式,内部包含x86架构和arm架构):oracle-instantclient19.10-sqlplus-base-devel(x86arm架构)-Oracle文档类资源-CSDN下载linux连接oracle工具,适用于x86及arm架构oracle-instantclient-更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/u010976445/85475478

官网下载地址Oracle Instant Client Downloadshttps://www.oracle.com/database/technologies/instant-client/downloads.html

?脚本内容

指定定时任务执行频率及告警日志

#===============参数区域=================
#监控周期(每天6点到22点每隔10分钟检测一次)
cronTab='*/10 6-22 * * *'
#指定告警信息文件(无需手动创建)
alarmInformationFile=/opt/soft/alarmInformation.txt

部分参数指定及识别

curTime:获取当前时间

monitorTime:可容忍的延迟时间(以下代码表示计算当前时间的2小时前的时间),即表示如果我数据库最新的时间是2.5小时前的,那就表示延迟,如果是1小时前的那再我可容忍的2小时内 表示没延迟

sqlStr:数据库连接字符串以及登录后执行的统计语句,此处包含一个EOF用法,不做过多解释

maxTime:数据库表最大的抽取时间,通过读取【sqlStr】执行结果解析得到

curPath:获取当前所在路径

curTime=`date +"%Y%m%d%H%M%S"`
monitorTime=`date -d "2 hour ago" +"%Y%m%d%H%M%S"`
sqlStr=`sqlplus -S test/test_123@192.168.195.13:1521/sndb <<EOF
select max(etltime) from T_LINKAGE_SEND  ;
EOF`
maxTime=`echo ${sqlStr}|awk '{print $3}'`
curPath=$(cd `dirname $0`;pwd)

创建预警日志目录及文件

alarmInformationFileDir=`echo ${alarmInformationFile}|awk -F/ 'OFS="/"{$NF="";print}'`
mkdir -p ${alarmInformationFileDir}
touch ${alarmInformationFile}

判断数据是否延迟?

即判断数据库内最新的抽取时间是否超过设置的可容忍延迟时间,但最新时间大于可容忍延迟时间,

正常:如果最新抽取时间大于可容忍延迟时间,则输出抽取正常,并删除预警日志中相关的日志信息
异常:如果最新抽取时间小于可容忍延迟时间,这输出抽取异常,并删除预警日志中之前的日志,重新输入新的异常信息

if [ ${maxTime} -gt ${monitorTime} ];then
   echo -e "当前检测时间:${curTime},抽取正常"  
   sed -i '/^monitorOracleStart/,/^monitorOracleEnd/d' ${alarmInformationFile}
else
   echo -e "当前检测时间:${curTime},预警信息异常,最新抽取时间:${maxTime}" 
   sed -i '/^monitorOracleStart/,/^monitorOracleEnd/d' ${alarmInformationFile}
   echo -e "monitorOracleStart\n当前检测时间:${curTime},抽取异常,最新推送时间:${maxTime}\nmonitorOracleEnd" >>${alarmInformationFile}
fi

添加到定时任务?

识别当前文件及路径,添加到定时任务中

curPath=$(cd `dirname $0`; pwd)
fileName=`echo "$0"|awk -F/ '{print $NF}'`
if [ -f "/var/spool/cron/root" ];then
? sed -i "/${fileName}/d" /var/spool/cron/root
? echo "${cronTab} sh ${curPath}/${fileName}" >> /var/spool/cron/root
? /sbin/service crond restart $1>/dev/null 2>&1
else
? touch /var/spool/cron/root
? sed -i "/${fileName}/d" /var/spool/cron/root
? echo "${cronTab} sh ${curPath}/${fileName}" >> /var/spool/cron/root
? /sbin/service crond restart $1>/dev/null 2>&1
fi

完整脚本

#! /bin/bash

#===============参数区域=================
#监控周期(每天6点到22点每隔10分钟检测一次)
cronTab='*/10 6-22 * * *'
#指定告警信息文件(无需手动创建)
alarmInformationFile=/opt/soft/alarmInformation.txt
#===============参数区域=================

#参数识别区域
curTime=`date +"%Y%m%d%H%M%S"`
monitorTime=`date -d "2 hour ago" +"%Y%m%d%H%M%S"`
sqlStr=`sqlplus -S test/test_123@192.168.195.13:1521/sndb <<EOF
select max(etltime) from T_LINKAGE_SEND ;
EOF`
maxTime=`echo ${sqlStr}|awk '{print $3}'`
curPath=$(cd `dirname $0`;pwd)

#创建预警日志目录及文件
alarmInformationFileDir=`echo ${alarmInformationFile}|awk -F/ 'OFS="/"{$NF="";print}'`
mkdir -p ${alarmInformationFileDir}
touch ${alarmInformationFile}
#开始判断最新推送时间是否与当前时间差距超过两小时
if [ ${maxTime} -gt ${monitorTime} ];then
   echo -e "当前检测时间:${curTime},抽取正常"  
   sed -i '/^monitorOracleStart/,/^monitorOracleEnd/d' ${alarmInformationFile}
else
   echo -e "当前检测时间:${curTime},预警信息异常,最新推送时间:${maxTime}" 
   sed -i '/^monitorOracleStart/,/^monitorOracleEnd/d' ${alarmInformationFile}
   echo -e "monitorOracleStart\n当前检测时间:${curTime},抽取异常,最新抽取时间:${maxTime}\nmonitorOracleEnd" >>${alarmInformationFile}
fi


#添加到定时任务
curPath=$(cd `dirname $0`; pwd)
fileName=`echo "$0"|awk -F/ '{print $NF}'`
if [ -f "/var/spool/cron/root" ];then
  sed -i "/${fileName}/d" /var/spool/cron/root
  echo "${cronTab} sh ${curPath}/${fileName}" >> /var/spool/cron/root
  /sbin/service crond restart $1>/dev/null 2>&1
else
  touch /var/spool/cron/root
  sed -i "/${fileName}/d" /var/spool/cron/root
  echo "${cronTab} sh ${curPath}/${fileName}" >> /var/spool/cron/root
  /sbin/service crond restart $1>/dev/null 2>&1
fi

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 10:53:18  更:2022-07-03 10:56:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 4:07:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码