Oracle DBMS SCHEDULER - 作业的电子邮件通知无效

时间:2018-03-30 13:07:26

标签: oracle email windows-server-2012-r2

我使用的是Oracle 11.2.0.1.0版。

我使用dbms scheduler创建了作业,如下所示

    DECLARE
    v_job_name VARCHAR2(5) := SYS.DBMS_SCHEDULER.GENERATE_JOB_NAME(prefix =>  'JOB'); 
BEGIN
    SYS.DBMS_SCHEDULER.create_job(
        job_name            =>  v_job_name,
        job_type            =>  'PLSQL_BLOCK',
        job_action          =>  'PKG_TEST.PROCEDURE_TEST;',
        start_date          =>  SYSDATE,
        enabled             =>  TRUE,
        repeat_interval     =>  'freq=minutely; interval=2',
        auto_drop           =>  FALSE,
        comments            =>  'Scheduler Test'        
    );
    SYS.DBMS_OUTPUT.PUT_LINE('Job Name is: ' || v_job_name);
END;

接下来,为上述作业配置电子邮件通知和SMTP服务器,如下所示,

EXEC SYS.dbms_scheduler.set_scheduler_attribute('email_server','XXXX.office365.com:XXX');
/
EXEC SYS.dbms_scheduler.set_scheduler_attribute('email_server_encryption','XXXXXX');
/
EXEC SYS.DBMS_SCHEDULER.create_credential (credential_name  => 'MAILSERVER_CREDENTIAL',
                                                username        => 'XXXXX@XXXXXX.com',
                                                password        => 'XXXXXX');
/
EXEC SYS.dbms_scheduler.set_scheduler_attribute('email_server_credential','MAILSERVER_CREDENTIAL');
/
EXEC SYS.DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION (
    job_name            =>  'JOB52',
    recipients          =>  'XXXXX@XXXXX.com',
    sender              =>  'XXXXX@XXXX.com.XX',
    subject             =>  'Oracle Scheduler Job Notification - %job_owner%.%job_name%.%job_subname% %event_type%',
    body                =>  'Job: %job_owner%.%job_name%.%job_subname%
                            Event: %event_type%
                            Date: %event_timestamp%
                            Log id: %log_id%
                            Job class: %job_class_name%
                            Run count: %run_count%
                            Failure count: %failure_count%
                            Retry count: %retry_count%
                            Error code: %error_code%
                            Error message: %error_message%',
    events              =>  'JOB_ALL_EVENTS',
    filter_condition    =>  NULL);

选中表DBA_SCHEDULER_JOB_RUN_DETAILS,按计划运行作业。

已检查表DBA_SCHEDULER_NOTIFICATIONS,与上述作业相关的电子邮件通知。

作业正在运行,但我没有收到电子邮件通知。

我已使用第三方应用程序和电子邮件触发检查了SMTP服务器和凭据。所以SMTP和凭证是正确的。

它出了问题。我搜索了互联网并提到了Oracle doc,但不知道导致这个问题的原因。

有没有办法检查电子邮件日志或导致..?

建议我解决这个问题。提前谢谢。

3 个答案:

答案 0 :(得分:1)

即使您的JOB成功运行,您的电子邮件也可能无法正确发送。这可能是由于经常设置防火墙规则来保护数据库服务器所致。因此,请检查您是否实际上可以从数据库服务器本身启动电子邮件。 通过SSH登录到DB服务器并执行以下命令进行检查。在执行之前,请确保替换SMTP详细信息。如果失败,请从网络级别检查原因。

curl -v --url 'smtps://smtp.gmail.com:465' --ssl-reqd \
  --mail-from 'XXXXXX@gmail.com' --mail-rcpt 'XXXXX@gmail.com' \
  --user 'XXXXXX@gmail.com:PASSWORD' \
  --upload-file mail.txt

mail.txt是您要发送的邮件的内容。

答案 1 :(得分:0)

我要检查的第一件事是作业是否正在运行而没有错误:

SELECT * FROM all_scheduler_job_run_details WHERE job_name = 'JOB52';

修改

我不知道任何电子邮件日志。您可以尝试尝试跟踪会话。此外,您似乎正在使用office365.com作为您的电子邮件服务器,它可能不接受您服务器的连接?

答案 2 :(得分:0)

尝试启用作业事件。

SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'BANINST1.UH_DISABLE_GUAGMNU_BAN8'
     ,attribute => 'RAISE_EVENTS'
     ,value     => SYS.DBMS_SCHEDULER.JOB_ALL_EVENTS);