工作中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的更多相关文章

  1. oracle 获取指定日期的第一天和最后一天

      oracle 获取指定日期的第一天和最后一天 CreationTime--2018年8月21日17点56分 Author:Marydon 1.查询本月的第一天和最后一天 SELECT TO_CHA ...

  2. Oracle 截取指定长度的字符

    去掉回车,换行符号,截取指定长度的字符 具体代码示例: --Function --去掉前后空格,截取字符,字符长度为P_Length create or replace function get_St ...

  3. 使用触发器实现记录oracle用户登录失败信息到alert.log日志文件

    前面我们说了用oracle自带的审计功能可以实现记录用户登录失败日志到数据表中(链接:http://www.54ok.cn/6778.html).今天我们来分享一下如何把用户登录失败信息记录到aler ...

  4. Oracle查询指定某一天数据,日期匹配

    在做一个功能的时候,需要在oracle数据库中查询指定某一天的数据. 如果是简单的当前日期前后几天,也好办 AND TO_CHAR(Rct.Creation_Date, 'YYYY-MM-DD')=t ...

  5. Oracle 生成指定范围内随机日期

    Oracle生成一个指定范围内的随机日期 /* 年1月1日)的整数偏移量来保存(即把日期保存为一个数字); * 因此可通过寻找‘指定日期’与‘关键日期’相对应的整数偏移量,再加一个指定范围内的随机整数 ...

  6. 数据库 alert.log 日志中出现 "[Oracle][ODBC SQL Server Wire Protocol driver][SQL Server] 'RECOVER'"报错信息

    现象描述: (1).数据库通过调用透明网络实现分布式事务,但透明网关停用后,失败的分布式事务并未清理. (2).数据库 alert 日志 Thu Sep 06 06:53:00 2018 Errors ...

  7. 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 ...

  8. oracle中从指定日期中获取月份或者部分数据

    从指定日期中获取部分数据: 如月份: select to_CHAR(sysdate,'MM') FROM DUAL; 或者: select extract(month from sysdate) fr ...

  9. ORA-00824: cannot set sga_target due to existing internal settings, see alert log for more information

    这篇文章是上篇文章”Expdp 导数错误 ORA-00832”的延续,前几天工作比较忙.累,直到今天才整理发出来.这个数据库实例的参数设置比较诡异其实是有原因的,由于这台数据库服务器系统是32位,数据 ...

随机推荐

  1. 05-Node.js学习笔记-第三方模块

    5.1什么是第三方模块 别人写好的,具有特定功能的,我们能直接使用的模块即第三方模块,由于第三方模块通常都是由多个文件组成并且被放置在一个文件夹中,所以又名包. 第三方模块有两种存在形式 以js文件的 ...

  2. 10. Vue - axios

    一.预备知识 1. JS面向对象 特点:ES5之前用构造函数方式,构造函数就是一个普通函数,它的函数名大写. 构造函数的问题:方法不会提升至构造函数内,而是每创建一个对象,就要把那个方法保存在每个对象 ...

  3. spanish-1.1

    1.1. ¿Cómo te llamas?Ana : ¿Cómo te llamas?Paco: Buenos dias. Yo soy Paco. Y tú, ¿cómo te llemas?Ana ...

  4. Java实现自定义注解开发

    Java实现自定义注解开发 一直都对注解开发挺好奇的,最近终于有时间自己实践了一把,记录一下 万一后期会用到呢 哈哈哈 首先我们了解一下自定义注解的标准示例,注解类使用 @interface 关键字修 ...

  5. Python Weekly 419

    文章,教程或讲座 如何用 Dropbox Security 构建用于日志系统的威胁检测和事件响应的工具 https://blogs.dropbox.com/tech/2019/10/how-dropb ...

  6. JavaScript空字符串判断

    JavaScript空字符串判断 本文完整示例代码GIT仓: 测试用例完整代码:isNullOrEmpty jPublic GIT仓:jPublic 比较常见写法 if (str == 'undefi ...

  7. [Spring cloud 一步步实现广告系统] 4. 通用代码模块设计

    一个大的系统,在代码的复用肯定是必不可少的,它能解决: 统一的响应处理(可以对外提供统一的响应对象包装) 统一的异常处理(可以将业务异常统一收集处理) 通用代码定义.配置定义(通用的配置信息放在统一的 ...

  8. 本地SQL Server数据库提示网络问题无法连接

    运行程序时发现本地SQLserver数据库无法连接,提示信息为:在与SQL Server 建立连接时出现与网络相关的或特定与实例的错误.未能找到或无法访问服务器.请验证实例名称是否正确并且SQL Se ...

  9. xBIM 综合使用案例与 ASP.NET MVC 集成(一)

    XbimWebUI是一个Javascript库,可用于BIM模型的Web表示.它使用WebGL并且独立于任何第三方WebGL框架.查看器的数据格式为WexBIM.不能直接加载IFC文件. 一.将IFC ...

  10. Flutter中通过https post Json接收Json

    Flutter 已然成为炙手可热前端框架.若问跨平台到底有多香,自然是要多香有多香.今天我就分享这些天研究Flutter http连接和json格式转换的内容,小弟对Flutter也是小白一名,如有错 ...