SHELL脚本学习-定时检查Oracle alert日志并发送mail
对于DBA来说,检查alert日志是日常工作。告警日志日积月累往往很大,而且每次在服务器上查看或者下载到目标主机查看都十分不方便。
为了方便,以下做出两种情况:(其他情况类推)
第一场景:每天早上上班检查头一天的告警日志。于是用以下脚本截取前一天的日志,发送到指定接收人的邮箱。
#编辑脚本:vim alertlog_day.sh #oracle用户下执行
#!/bin/bash
# 筛选前一日的alert日志,方便每天早上查看前一天的日志。
#
export LANG=en_US
TODAY=`date +%Y-%m-%d`
YESTERDAY=`date -d -1days +%Y-%m-%d`
sed -n "/$YESTERDAY/,/$TODAY/"p $ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/trace/alert_$ORACLE_SID.log > /opt/oraclesh/alert_$ORACLE_SID_$YESTERDAY.log
echo "Please find the attachment!" |mail -s "ALTER_SID_LOG_$YESTERDAY" -a /opt/oraclesh/alert_$ORACLE_SID_$YESTERDAY.log xxx@xxx.com
第二场景:每隔一个小时截取一次告警日志,并对日志内容初步分析。判断是否存在ORA-相关错误,出现错误的才发至指定接收人邮箱。
#编辑脚本:vim alertlog_hour.sh #oracle用户下执行
#!/bin/bash
# 筛选alter日志:按每小时截取日志并存放到目标路径。
# 判断如果该日志存在ORA-的相关错误,则发送邮件给接收人;
# 判断如果该日志无任何错误,则无需发送邮件。只记录一下执行日志即可,以备后续查阅。
export LANG=en_US
ONE_HOUR_AGO=`date -d -1hour +%Y-%m-%dT%H`
CURRENT_TIME=`date +%Y-%m-%dT%H`
STORAGE_PATH="/opt/oraclesh/alert_$ORACLE_SID_$ONE_HOUR_AGO.log"
sed -n "/$ONE_HOUR_AGO/,/$CURRENT_TIME/"p $ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/trace/alert_$ORACLE_SID.log > $STORAGE_PATH
if [ `grep -i "ORA-" $STORAGE_PATH | wc -l` -ne ] ;then
echo "Find errors, please see the attachment for details !" |mail -s "ALTER_SID_LOG_$ONE_HOUR_AGO" -a $STORAGE_PATH xxx@xxx.com
else
echo "$ONE_HOUR_AGO: No error find in file" >> /opt/alert_normal.log
fi
如果要在root用户下书写,增加设置变量:
ORACLE_BASE=`su - oracle -c "env | grep ORACLE_BASE "|awk -F "=" '{print $2}'`
ORACLE_SID=`su - oracle -c "env | grep ORACLE_SID "|awk -F "=" '{print $2}'`
SHELL脚本学习-定时检查Oracle alert日志并发送mail的更多相关文章
- Shell学习---Shell脚本的静态检查工具shellcheck
Shell脚本的静态检查工具shellcheck ubuntu下 apt install shellcheck ,即可安装shellcheck.写完shell脚本,记得用它检查一下,能给你点建议的.要 ...
- Shell脚本学习指南笔记
Shell脚本学习指南 作者:Danbo 2015-8-3 脚本编程语言与编译型语言的差异 许多中型.大型的程序都是用编译型语言写的,例如:C.C+.Java等.这类程序只要从源代码(Source C ...
- 笔记——shell脚本学习指南
<shell脚本学习指南>机械工业出版 ISBN 987-7-111-25504-8 第2章 2.4 初级陷阱 1.当今的系统,对#!这一行的长度限制从63到1024个字符都有,尽量不要超 ...
- Shell 脚本学习资料搜集
Shell文档 ChinaUnix上大神“網中人”总结的Shell十三问,强烈推荐,这本书讲得比较精炼,而且都是一些Shell学习中容易把握不住的一些细节难点.每一问都写得非常精彩.ChinaUnix ...
- 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式
正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...
- 转 shell脚本学习指南
shell脚本学习指南 以下八点不敢说就能成为你shell脚本学习指南de全部,至少可以让你编写出可靠的shell脚本. 1. 指定bashshell 脚本的第一行,#!之后应该是什么?如果拿这个问题 ...
- Shell脚本学习 - 运算符
继续shell脚本学习.上一篇是基本数据类型和语法的总结,这一篇是运算相关的操作. 运算符 bash不支持简单的数学计算,需要依赖其他命令实现. expr可以代为实现. # 表达式一般这么写 ` + ...
- shell脚本学习总结02--数组
bash同时支持普通数组个关联数组,普通数组只能使用整数作为数组的索引,关联数组可以使用字符串作为数组的索引. 数组的定义方法: 在单行中使用一列值定义一个数组 [root@new ~]# array ...
- shell脚本学习之6小时搞定(1)
shell脚本学习之6小时搞定(1) 简介 Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本. Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等,习惯上把 ...
随机推荐
- java和.net连接数据库的方法
.net连接数据库的方法 App.config <connectionStrings> <add name="" connectionString="D ...
- LWIP之ARP协议
描述ARP缓存表的数据结构: struct etharp_entry { struct etharp_q_entry *q; //数据包缓冲队列指针 ip_addr_t ipaddr; //目标IP地 ...
- java面试题复习(六)
51.实现多线程的方法 一种是继承Thread类:另一种是实现Runnable接口.两种方式都要通过重写run()方法来定义线程的行为,推荐使用后者,因为Java中的继承是单继承,一个类有一个父类,如 ...
- leetcode1035
class Solution: def maxUncrossedLines(self, A: 'List[int]', B: 'List[int]') -> int: m = len(A) n ...
- python之路:模块初识
python王者开发之路:模块初识 模块初识我现在讲的确有点早.不过没关系,后面我会详细说模块. 模块,也就是库,是python三剑客之一.这三剑客,函数.库和类,都是由程序编写而成的.之所以我先说模 ...
- 团队作业6—《Spring_Four》团队项目系统设计改进与详细设计
一.修改完善团队项目系统设计说明书 a.分析<考信项目系统设计说明书>初稿的不足:数据库建模不足 b. 团队项目Github仓库中更新:https://github.com/gzyt/SR ...
- eclipse-jee-kepler 如何设置编译compiler为1.8
最新下载了jdk1.8,想在eclipse里面用一下 jdk1.8的新特性 但是,貌似eclipse(eclipse-jee-kepler-SR2-win32-x86_64.zip)最高的编译级别为: ...
- PHP : MySQLi【面向过程】操作数据库【 连接、建库、建表、增、删、改、查、关闭】
<?php /** *数据库操作关键函数 *mysql_connect:连接数据 *mysql_error:最后一次sql动作错误信息 *mysqli_query:执行sql语句,增删该查 *m ...
- Linux ansible 常用模块二
fetch 将远程机器上的文件拉取到本地,以ip或者主机名生成目录,并保留原来的目录结构 dest #目标地址src #源地址ansible web -m fetch -a "dest ...
- 2018-2019-2 20175218 实验一《Java开发环境的熟悉》实验报告
实验内容.步骤与体会: 1.实验过程的理解,实验指导书中知识点的理解. (1)知道了JVM.JRE.JDK之间的区别. JVM就是我们熟知的Java虚拟机:JRE是Java运行环境:而JDK则是Jav ...