Oracle作业警报通知

Oracle作业警报通知,oracle,plsql,oracle11g,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 =>

我正在运行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
是否存在与特权相关的问题?

该函数存在于中,但不存在于中

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

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错误总是很特殊的,据我所知,可能并不总是出现在该表中。您需要仔细测试它。

我设置了一个perl脚本,它作为cron作业定期运行,当DBMS作业中发生错误时,它会打印警告。因为我的crontab有一个
MAILTO=
设置,所以所有警告都将通过电子邮件发送给我

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";
    }
}

非常感谢。但我如何设置电子邮件警报?@Kaushik:创建一个每X分钟运行一次的作业,添加一个谓词,如
和(sysdate-cast(log_date as date))*24*60