用于监视oracle警报日志文件的Perl脚本

时间:2013-05-30 10:07:18

标签: oracle perl

我们有自定义监控Perl脚本选择时间数据来监控oracle警报日志文件中的警报日志,格式为“Wed May 29 23:55:19 2013”​​。但是对于Oracle 10.2.0.5数据库,oracle还会在警报日志文件中写入时区信息以及日期,例如“Thu May 30 01:30:43 ADT 2013”​​。

我们使用下面的脚本来获取yyyymmddhhmmss中的时间戳。但是当alertlog文件具有带时区的日期格式时,相同的脚本已失败。

sub make_timestamp
{
    my ($day_name,$month_name,$day,$time_stamp,$year,$timestamp);
chomp @_[0];
($day_name,$month_name,$day,$time_stamp,$year) = split (/ +/,@_[0]);
($hour,$min,$sec) = split(/:/,$time_stamp);
## $day = $padded_number{$day} if ($day < 10);
$timestamp = $year . $month{$month_name} . $day . $hour . $min . $sec;
return $timestamp;
}

你可以帮我修理一下这段代码吗?

1 个答案:

答案 0 :(得分:0)

试试这个

sub make_timestamp
{
 chomp $_[0];
  my ($day_name,$month_name,$day,$time_stamp,$timezone,$year) = split (/ +/,$_[0]);
  $time_stamp =~ s/://g;
  ## $day = $padded_number{$day} if ($day < 10);
  my $timestamp = $year . $month{$month_name} . $day . $time_stamp;
  return $timestamp;
}

我量身定做了一点。使用$_[0]代替@_[0]。变量的声明和定义也可以放在一行中。我会删除$timestamp变量并立即返回组合值。

无论如何,我建议你将use strict; use warnings;添加到脚本的开头。它有助于减少可能的错误。