|
本帖最后由 lixiaxin200319 于 2014-8-28 21:43 编辑 一、脚本代码 #脚本名为filter_alert_v2.sh #过滤出2014年7月1日之后的错误日志,ORACLE_SID=orcl sed -n '/... Jul .. ..:..:.. 2014/,$'p $ORACLE_BASE/admin/*/bdump/alert_$ORACLE_SID.log | awk ' $1~/Mon|Tue|Wen|Thu|Fri|Sat|Sun/{flag=1;string=$0} $1~/ORA-|OSD-|Error/{if(flag==1) {print"\n";print "----------------------------------------";print string;flag=0}print $0}' >filter_alert_"$ORACLE_SID"_`date +"%Y%m%d"`.log #过滤出2014年7月1日之后的所有告警日志信息 sed -n '/... Jul .. ..:..:.. 2014/,$'p $ORACLE_BASE/admin/*/bdump/alert_$ORACLE_SID.log >alert_"$ORACLE_SID"_`date +"%Y%m%d"`.log #去除告警日志过滤后的重复数据 awk '$0 ~ /---/ {print t;t="" ;print "\n\n\n"} $0 !~ /---/ && $1 !~ /Mon|Tue|Wen|Thu|Fri|Sat|Sun/ {t=t"\t"$0} ' filter_alert_orcl.log > filter.log #在去除重复时进行了统计,统计每一种错误类型出现多少次,并进行了倒序排序 grep -v "^$" filter.log | sort | uniq -c | sort -k1,1nr |uniq|awk '{n=split($0,arr,"\t") ;for (i=1;i<=n;i++) {print arr}}' > filter2.log ############################################################### #下面的代码是把错误日志对应的追踪文件复制出来 ############################################################### #去除追踪文件完整路径? grep "\.trc" filter_alert_orcl.log |awk '{ gsub(/:/,"") }{print $4}'>rdbms.trc #去除重复 awk '! a[$0]++' rdbms.trc > rdbms2.trc #生成复制追踪文件的脚本,把追踪文件复制到当前目录下的 rdbms_trc中。 awk '{gsub(/\/oracle/,"cp /oracle")}{print $0 " rdbms_trc/"}' rdbms2.trc > cp_rdbms_trc.sh if [ ! -d rdbms_trc ] then mkdir rdbms_trc fi chmod 755 cp_rdbms_trc.sh ./cp_rdbms_trc.sh 二、执行脚本的效果 #使用ORACLE用户执行脚本 $./filter_alert_v2.sh #查看filter2.log文件,错误日志已经按类型进行了去除重复,并统计了每种类型的错误信息出现的次数,并且按照错误类型出现的次数进行了倒序排序,这样一眼就可以看出哪种错误出现了多少次。内容如下:(错误信息前面的数字,是错误出现次数的统计值) 1874 Errors in file /oracle/admin/orcl/bdump/orcl_arc0_9991.trc: ORA-16055: 已拒绝 FAL 请求 1872 Errors in file /oracle/admin/orcl/bdump/orcl_arc0_9991.trc: ORA-00308: 无法打开归档日志 '/backup/arch/2_222824_623520482.dbf' ORA-27037: 无法获得文件状态 11 Errors in file /oracle/admin/orcl/bdump/orcl_j000_9912.trc: ORA-12012: 自动执行作业 65 出错 ORA-06550: 第 1 行, 第 105 列: ORA-06550: 第 1 行, 第 96 列: |