自动检查Oracle AlertLog的脚本.
在windows上测试过. Unix/Linux系统应该也能成但是没试.
[@more@]在我们的环境中,有N台Oracle Instance.每天人工去查看Alert Log显然不太可能.
这个脚本会根据输入去查找Alert Log. 如果有错误会用非0代码退出,否则用0退出显示成功.根据各人的环境不同可以在外面再包一层,比如接收到非0代码退出则自动发送信件等等.这个就没有包含在里面了.
文件列表如下:
env_variables_Test: 配置文件.文件名是 env_variables_.
在这个配置文件中目前有用的只有一个参数就是LOG_DIR 也就是决定log文件要写在哪里
Common.pl一个常用的sub的集合.其中有一个sub是专门用来读参数文件的.只要参数文件中符合 A = B的条目都给读进去.
dba_oracle_chkalert.pl: 主体啦.
用法是这样的:
perl dba_oracle_chkalert.pl --sid Test --filename alert_test.log --exclude ORA-01555 -exclude xxxxxx
它找到错误以后,会把错误的前后三行都打印到$log_file中间.目前这个"前后三行"是写死的.在第61行, my $intelval = 3;可以改成从外面输入
exclude的是说排除的错误.
现在有个问题就是,如果错误叠错误的,比如第一行是ORA-01555 第二行是ORA-19504.那么第一行是本来应该被排除的,结果因为第二行要写前后三行就被写进去了...
自己来评评这个脚本:
1.读alert log的时候用一个数组把整个文件都读入内存了.如果alert文件不大还没有问题,如果有几百M那可能就有问题了...
这个主要是perl不支持直接读文件第几行的这种操作.我目前知道的就是用seek和read来做,但是很复杂的样子...抱头.改天再包装一个到common中间吧.
2.这个脚本应该配合一个age alert的脚本来用.你想啊,总不能同个错今天发生了,今天找找有的,明天找找又有的.今天找出错以后就应该用脚本把今天的这个alert文件改名成一个.err文件之类的让oracle去写一个新的alert才不会"错了又错"
3.有心想把这脚本改成"有错报错,无错退出",然后具体错误自己去看alert log的形式被同事BS了...不过我还是觉得就是前后写多少行有时候还是不准确的呀~
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7369227/viewspace-1020125/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7369227/viewspace-1020125/