Oracle作业警报通知

时间:2011-09-26 15:25:41

标签: oracle plsql oracle11g

我正在运行oracle 11g。我尝试为工作设置电子邮件通知。

BEGIN
 DBMS_SCHEDULER.add_job_email_notification (
  job_name         =>  'JOB_COLLECT_SESS_DATA',
  recipients       =>  'kaushik.guha@bmo.com',
  events           =>  'job_failed'/*,
  filter_condition => ':event.error_code=600'*/);
END;
/

我得到了:

PLS-00302: component 'ADD_JOB_EMAIL_NOTIFICATION' must be declared

是否存在与特权相关的问题?

2 个答案:

答案 0 :(得分:1)

该功能存在于11.2中,但不存在于11.1中。

您可以通过创建另一个查看作业状态的作业来重现该功能:

select *
from dba_scheduler_job_run_details
where job_name = 'JOB_COLLECT_SESS_DATA'
    and status = 'FAILED'
    and additional_info like 'ORA-00600%'
order by log_id desc;

该查询至少可以解决一些错误。但ORA-00600错误总是很特殊,并且可能并不总是出现在我所知道的那个表中。你需要仔细测试一下。

答案 1 :(得分:1)

我设置了一个perl脚本,它定期作为cron作业运行,当DBMS作业发生错误时会打印警告。由于我的crontab设置为MAILTO=<email@domain.com>,因此所有警告都会通过电子邮件发送给我。

my $dbh  = ... # set up a database connection using DBI
my $jobs = $dbh->selectall_arrayref("SELECT * FROM USER_JOBS", { Slice=>{}});

for my $job ( @$jobs ) {
    if ($job->{NEXT_DATE} eq '01-JAN-4000') {
        warn "DBMS-Job $job->{WHAT} is currently stopped.\n";
        warn "Last running at: $job->{LAST_DATE} $job->{LAST_SEC}\n";
    }
    elsif ( $job->{FAILURES} ) {
        warn "DBMS-Job $job->{WHAT} has failures.\n";
        warn "Last running at: $job->{LAST_DATE} $job->{LAST_SEC}\n";
    }
    else {
        warn "DBMS-Job $job->{WHAT} is broken.\n";
        warn "Last running at: $job->{LAST_DATE} $job->{LAST_SEC}\n";
    }
}