#!/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 <
set head off
set pagesize 0
set echo off
$p1
exit;
EOF
`;
$/="";
chomp($res);
return $res;
}