我正在运行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
是否存在与特权相关的问题?
答案 0 :(得分: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";
}
}