Oracle - 截取指定日期的alert log
工作中DBA经常会查看alert log来检查数据库后台都记录了些什么日志,如果只想看某一天或者某段时间范围的日志,能够把这些日志从大的alert log中截取下来放到一个单独的文件中,对于查看和下载都是很有意义的事,接下来附上脚本
script.sh
#!/bin/bash
################################################################################
# this script is to get the specified date log of oracle database alert log. #
# author: yangbao #
# usage: ./script.sh -- --> get the log on -- #
# ./script.sh -- -- --> get the log between -- and -- #
################################################################################ # 判断日期格式是否有效
check_date() {
date -d "$1" &> /dev/null
flag=$?
if [ $flag -eq ]; then
echo "date is incorrect, please input the correct date formate like 2019-5-1."
exit
fi
} # 得到开始和结束的日期的指定格式
get_begin_time() {
year1=`date -d "$1" +%Y`
month1=`date -d "$1" +%b`
day1=`date -d "$1" +%d`
week1=`date -d "$1" +%a`
} get_end_time() {
year2=`date -d "$1" +%Y`
month2=`date -d "$1" +%b`
day2=`date -d "$1" +%d`
week2=`date -d "$1" +%a`
} # 判断输入的参数个数是否正确
cnt=$#
if [ $cnt -eq ]; then
echo "you must input at least one date, formate like 2019-5-1."
exit
elif [ $cnt -eq ]; then
var1=$
check_date $var1
get_begin_time $var1
get_end_time $var1
elif [ $cnt -eq ]; then
var1=$
var2=$
check_date $var1
check_date $var2
t1=`date -d "$var1" +%s`
t2=`date -d "$var2" +%s`
if [ $t1 -gt $t2 ]; then
temp=$var1
var1=$var2
var2=$temp
fi
get_begin_time $var1
get_end_time $var2
elif [ $cnt -gt ]; then
echo "you input too much arguments, at most two arguments allowed."
exit
fi # 查找alert日志所在的路径
sqlplus -s /nolog &> /dev/null << eof
set feedback off heading off verify off trimspool on timing off
set pagesize linesize
conn / as sysdba;
spool /tmp/tmpdir.txt
select value from v\$parameter where name='background_dump_dest';
spool off
exit;
eof errs=`grep 'ERROR' /tmp/tmpdir.txt | wc -l`
if [ $errs -gt ]; then
echo "query alert log direction run error, please check the /tmp/tmpdir.txt for details."
exit
else
dir=`cat /tmp/tmpdir.txt`
fi # 得到日志开始和结束的行数
row1=`find $dir/alert_$ORACLE_SID.log | xargs grep -n "$week1 $month1 $day1" | grep "$year1" | head -n | cut -d ":" -f `
if [ "$row1" == "" ]; then
echo "$1 is not found in alert log"
exit
fi row2=`find $dir/alert_$ORACLE_SID.log | xargs grep -n "$week2 $month2 $day2" | grep "$year2" | tail -n | cut -d ":" -f `
if [ "$row2" == "" ]; then
echo "$2 is not found in alert log"
exit
fi
row2=$(($row2+)) # 截取日志
if [ $cnt == ]; then
sed -n "${row1},${row2}p" $dir/alert_$ORACLE_SID.log > ./alert_$ORACLE_SID.$var1.log
echo "alert_$ORACLE_SID.$var1.log has created!"
elif [ $cnt == ]; then
sed -n "${row1},${row2}p" $dir/alert_$ORACLE_SID.log > ./alert_$ORACLE_SID."$var1"_to_"$var2".log
echo "alert_$ORACLE_SID."$var1"_to_"$var2".log has created!"
fi
exit
使用说明:
1.使用oracle用户执行,脚本会自动寻找alert日志的位置
2.如果只查一天的日志,如2019-5-1这天的日志,则使用./script.sh 2019-5-1
3.如果查一段时间范围的日志,如2019-5-1到2019-5-10这10天的日志,则使用./script.sh 2019-5-1 2019-5-10
4.执行完成之后会在当前目录生成一个新文件
5.输入的日期必须在alert日志中存在才会有新文件生成,否则会报错
Oracle - 截取指定日期的alert log的更多相关文章
- oracle 获取指定日期的第一天和最后一天
oracle 获取指定日期的第一天和最后一天 CreationTime--2018年8月21日17点56分 Author:Marydon 1.查询本月的第一天和最后一天 SELECT TO_CHA ...
- Oracle 截取指定长度的字符
去掉回车,换行符号,截取指定长度的字符 具体代码示例: --Function --去掉前后空格,截取字符,字符长度为P_Length create or replace function get_St ...
- 使用触发器实现记录oracle用户登录失败信息到alert.log日志文件
前面我们说了用oracle自带的审计功能可以实现记录用户登录失败日志到数据表中(链接:http://www.54ok.cn/6778.html).今天我们来分享一下如何把用户登录失败信息记录到aler ...
- Oracle查询指定某一天数据,日期匹配
在做一个功能的时候,需要在oracle数据库中查询指定某一天的数据. 如果是简单的当前日期前后几天,也好办 AND TO_CHAR(Rct.Creation_Date, 'YYYY-MM-DD')=t ...
- Oracle 生成指定范围内随机日期
Oracle生成一个指定范围内的随机日期 /* 年1月1日)的整数偏移量来保存(即把日期保存为一个数字); * 因此可通过寻找‘指定日期’与‘关键日期’相对应的整数偏移量,再加一个指定范围内的随机整数 ...
- 数据库 alert.log 日志中出现 "[Oracle][ODBC SQL Server Wire Protocol driver][SQL Server] 'RECOVER'"报错信息
现象描述: (1).数据库通过调用透明网络实现分布式事务,但透明网关停用后,失败的分布式事务并未清理. (2).数据库 alert 日志 Thu Sep 06 06:53:00 2018 Errors ...
- Oracle 12CR2 中alert.log出现大量的 WARNING: too many parse errors 告警
Oracle 12CR2 中alert.log出现大量的 WARNING: too many parse errors 告警 日志如下: 2018-06-24T17:16:21.024586+08 ...
- oracle中从指定日期中获取月份或者部分数据
从指定日期中获取部分数据: 如月份: select to_CHAR(sysdate,'MM') FROM DUAL; 或者: select extract(month from sysdate) fr ...
- ORA-00824: cannot set sga_target due to existing internal settings, see alert log for more information
这篇文章是上篇文章”Expdp 导数错误 ORA-00832”的延续,前几天工作比较忙.累,直到今天才整理发出来.这个数据库实例的参数设置比较诡异其实是有原因的,由于这台数据库服务器系统是32位,数据 ...
随机推荐
- A:linux基础章节导航
本章的内容主要有: 模板机的安装 常用的小命令 find awk vim sed
- 【西北师大-2108Java】第十一次作业成绩汇总
[西北师大-2108Java]第十一次作业成绩汇总 作业题目 面向对象程序设计(JAVA) 第13周学习指导及要求 实验目的与要求 (1)掌握事件处理的基本原理,理解其用途: (2)掌握AWT事件模型 ...
- C# 对 Excel 的相关操作
C# 对Excel的操作 学习自: 教练辅导 C# 对Excel的读取操作 我们需要额外添加引用: References 搜索Excel 这样我们的基础就添加完成了. 并且在using 中添加: us ...
- SA详细注释不压行代码
){ //变量含义:m是字符集大小,n是字符串长度,c是一个桶数组,a[i]是字符串(下标从1开始) //rk[i]就是suffix(i)的字典序排名,sa[i]就是要求的排名为i的后缀的起始位置,即 ...
- 易优CMS:channel的基础用法
[基础用法] 名称:channel 功能:易优常用标记,可以循环嵌套标签.通常用于网站导航以获取站点栏目信息,方便网站会员分类浏览整站信息 语法: {eyou:channel type='top' r ...
- windows下cocos2d-x环境搭建
该教程使用的cocos2dx的版本为3.14,3之后的大概都差不多 Python环境搭建: cocos2dx在windows上新建工程需要用到python脚本,安装python-2.7.x,可以上py ...
- AttributeError: 'unicode' object has no attribute 'tzinfo' 未解决
Internal Server Error: /demo/machineinfo.htmlTraceback (most recent call last): File "C:\Python ...
- Web前端基础(14):jQuery基础(一)
1. jQuery概述 1.1 为什么要使用jQuery 在用js写代码时,会遇到一些问题: window.onload 事件有事件覆盖的问题,因此只能写一个事件. 代码容错性差. 浏览器兼容性问题. ...
- Ajax跨域请求,设置content
在使用Ajax跨域请求时,如果设置Header的ContentType为application/json,会分两次发送请求.第 一次先发送Method为OPTIONS的请求到服务器,这个请求会询问服务 ...
- JQuery Deferred对象使用小结
场景描述 如下,打开页面时,获取默认选中的项目,同时也会初始化Combobox下拉框下拉列表数据 问题描述 获取默认选中项目及下拉列表的js函数位于common.js文件,类似如下: // 根据项目类 ...