《使用shell处理oracle数据库alert日志》.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
??? 本文给出使用shell实现对oracle数据库的alert日志进行处理的算法和实现过程,并给出一个样例,实例表明,脚本能快速有效的分析alert日志,满足需求,最后对处理过程进行展望。 1. 背景概述 ????? 对于日常的一些重复性的操作,以及在用户现场进行问题处理的过程中,采用一些自动化的脚本,来完成一些工作,会使一些枯燥的工作变得简单、快速,同时也不 容易出错。在为某些省份联通公司和财政厅实施服务的过程中,了解到用户有如下的需求:提供shell脚本,实现对oracle数据库的alert日志进行 跟踪处理,比如根据时间(天为单位),来查看和处理alert日志。 ?????? 在未编写脚本时,常用的处理方法是,下载alert文件,使用文本编辑工具查找,统计,定位,过滤,下载跟踪文件。一般比较费时,而且可能会有遗漏。 ????? 本文首先阐述算法,接着给出实现代码与样例,最后给出展望,脚本主要包括shell脚本以及sql脚本。 2. 算法 ?????????????????????????????????????????????? 图1 流程图 ???? ?确定需要分析多少天以来的日志情况 ???? 对时间进行处理,根据时间戳格式(本文处理的alert文件的时间格式类似于:Fri Aug 1 13:22:37 2008),获取起始行号,分析从起始行号到结束的所有内容。 ??? ?过滤所有的ORA-信息,并对他们进行统计显示。 ??? 对关键的错误信息(ORA-00600,ORA-000060,ORA-1555,ORA-07445),进行单独处理。 ??? 查找并获取跟踪文件。生成ftp的格式,使用ftp命令下载跟踪文件。 ??? 使用操作系统命令,获取错误对应的含义。 3. Shell代码 处理alert文件的调用脚本check_alert.sh #!/bin/sh #设置alert日志文件的环境变量 ORIGINAL_ALERT=/arraybill/home/oracle/app/oracle/admin/hnbill/bdump/alert_hnbill.log #判断输入的参数:天 if [ $# -ne 1 ] then echo 参数不对,用法: sh check_alert.sh 3 exit 1 fi if [ $1 -lt 0 ] then echo 对不起,请输入一个非负整数 exit 1 fi #查询参数对应时间以前的系统时间 sh dated_alert.sh $1 /dev/null #分解时间格式,注意,其中天可能是一位,也可能是两位,月份是3位,月份与天组成的字符串长度固定 str_day=$(sed 1d tmp_date.log|awk {if(substr($1,1,1) == 0) print substr($1,2,1);else print substr($1,1,2) }) str_length=$(echo $str_day|awk {print length($1)}) #将三个字母表示的月份分解成首字母大写,其他小写 str_month=$(sed 1d tmp_date.log|awk {print substr($1,4,3)}|sed 1,$y/[JFMASODN]ABCDEFGHIJKLMNOPQRSTUVWXYZ/[JFMASODN]abcdefghijklmnopqrstuvwxyz/) if [ $str_length -eq 1 ] then echo awk /$str_month $str_day/{print NR} $ORIGINAL_ALERT tmp.sh #echo $str_month $str_day fi if [ $str_length -eq 2 ] then echo awk /$str_month $str_day/{print NR} $ORIGINAL_ALERT tmp.sh #echo $str_month $str_day fi chmod 777 tmp.sh chmod 777 tmp.sh sh tmp.sh |awk NR==1{print $1} rownum.lst #获取要处理的alert日志的开始行号和结束行号 alert_row_begin=$(cat rownum.lst |awk {print $1}) alert_row_end=$(wc -l $ORIGINAL_ALERT|awk {print $1}) echo awk NR==$alert_row_begin,NR==$alert_row_end{print \$0} $ORIGINAL_ALERT tmp.sh

文档评论(0)

ghfa + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档