oracle 告警日志(alert log)按日期查看
2015-06-10 00:00
344 查看
摘要: 做数据库运维,需要经常有查看oracle后台日志(alert log)来发现数据库是否存在问题,通常可以使用tail -100之类的方式来查看,但是经常是不是查多了,就是查少了;为了能够方便的按日期一范围来查看日志,因此有了这个脚本“get_alert”适用于linux/unix下的oracle数据库。
#!/usr/bin/perl use Time::Local; $alert_sql="select d.value||'/alert_'|| e.instance_name||'.log' background_dump_dest from v\\\$parameter d,v\\\$instance e where d.name='background_dump_dest' and rownum<2;"; $ver_sql="select substr(version,1,4) version from v\\\$instance;"; $ALERT_FILE=exec_sql($alert_sql); $DB_VERSION=exec_sql($ver_sql); check_main(); sub help() { print "usage:\n"; print "get_alert 0 --get today\'s alert log.\n"; print "get_alert 2 --get alert log from 2 days ago to now.\n"; print "get_alert 2010-09-01 --get alert log from 2010-09-01 to now.\n"; print "get_alert 2010-09-01 2010-10-01 --get alert log between 2010-09-01 and 2010-10-01.\n"; exit 1; } sub get_date { ($p1)=@_; @ds_array=split(/-/,$p1); $seconds=0; if(@ds_array==1) { $seconds=(time() - 86400*$p1); } else { $seconds = timelocal(0,0,0,$ds_array[2],$ds_array[1]-1,$ds_array[0]-1900); } return $seconds; } sub check_main() { if(@ARGV<1) { help(); } $start_row=get_rownum(get_date($ARGV[0])); $end_row=`sed -n '\$=' "$ALERT_FILE";`; if(@ARGV>=2) { $end_row=get_rownum(get_date($ARGV[1]))-1; } chomp $end_row; if($start_row>0 && $end_row>$start_row) { print `sed -n "$start_row,${end_row}p" $ALERT_FILE ;`; } } sub get_rownum { $ds=scalar localtime($_[0]); ($p1,$p2)=(substr($ds,0,10),substr($ds,20,24)); ## if(substr($p1,8,1) ==" " && $DB_VERSION =="11.2") { substr($p1,8,1,"0"); } print "$p1 $p2 \n"; ## $rownum=`egrep -n -i "$p1" $ALERT_FILE | grep "$p2" | head -1; `; @rs=split(/:/,$rownum); return $rs[0]; } sub exec_sql { ($p1)=@_; $res=` sqlplus -s / as sysdba <<EOF set head off set pagesize 0 set echo off $p1 exit; EOF `; $/=""; chomp($res); return $res; }
相关文章推荐
- oracle 11g 忘记了sys,system,scott密码
- 从oracle迁移到DB2(windows版)
- windows oracle EM的安装配置
- oracle的substr和replace
- Oracle分区总结
- oracle 主键 外键
- oracle创建表空间
- oracle表空间的删除 用户的删除
- oracle dblink造成远程数据库session过多
- oracle 中存储过程无法编译。卡死, session kill 不掉。
- oracle11g dataguard 安装手册(转)
- Oracle临时表
- oracle 记录被别的用户锁住
- Oracle 别名
- oracle 数据库 表空间创建 用户创建 用户授权
- Oracle中打开10046 Trace的各种方法
- Oracle中函数/过程返回多个值(结果集)
- oracle中prior的用法,connect by prior,树形目录
- oracle常用的数据字典
- oracle与其他数据库的区别