Job Email Notification

Oracle versione 11gR2

Supponiamo di avere un job che effettua insert in una tabella in un intervallo di tempo, e di voler inviare una notifica via email se il job va in errore o è  disabilitato o rotto.

Di seguito la tabella da popolare.
CREATE TABLE BIBI.CONTRATTI
(
  ID_TIPOLOGIACONTRATTO  NUMBER                 NOT NULL,
  DESCRIZIONE            VARCHAR2(100 CHAR)     NOT NULL,
  DATA_INIZIO_VALIDITA   DATE                   NOT NULL,
  DATA_FINE_VALIDITA     DATE,
  DATA_ULTIMO_AGGIORN    DATE                   NOT NULL,
  ID_OPERATORE           VARCHAR2(100 CHAR)     NOT NULL
);



Usiamo lo scheduler job per creare un job che esegue la insert in tabella ogni minuto in un intervallo di tempo definito dai parametri start_date e end_date.

begin
dbms_scheduler.create_job (
job_name => 'JOB_INSERISCI_CONTRATTI',
job_type => 'PLSQL_BLOCK',
job_action => 'insert into bibi.Contratti values ( 176 , ''Contratto'', sysdate, null, sysdate, 176);',
start_date => TO_TIMESTAMP(SYSDATE),
repeat_interval => 'FREQ=MINUTELY',
comments => 'Test popolamento tabella',
end_date => TO_TIMESTAMP(SYSDATE + 5/1440)
);
end;
/

begin
dbms_scheduler.enable( 'JOB_INSERISCI_CONTRATTI');
end;
/

Query di verifica:

select  owner,job_name,state,run_count, enabled , START_DATE, end_date ,NEXT_RUN_DATE
from dba_scheduler_jobs where job_name in ('JOB_INSERISCI_CONTRATTI')order by 1 desc

select * from  dba_scheduler_job_run_details 
where job_name in ('JOB_INSERISCI_CONTRATTI')order by 1 desc;

select log_id, trunc(log_date) log_date, owner, job_name, operation , status
from dba_scheduler_job_log
where job_name in ('JOB_INSERISCI_CONTRATTI')order by 1 desc;

Per l'invio delle email occorre settare i seguenti parametri;

exec dbms_scheduler.set_scheduler_attribute ('email_server', 'mail.studio.it:25');
exec dbms_scheduler.set_scheduler_attribute ('email_sender','oracle@lab03.intra.studio.it');

Query di verifica:
select * from all_scheduler_global_attribute  where attribute_name IN ('EMAIL_SERVER', 'EMAIL_SENDER');

begin
DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION (
job_name => 'JOB_INSERISCI_CONTRATTI',
recipients => 'dylandog@studio.it',
--sender => 'oracle@lab03.intra.studio.it',
subject => 'Scheduler Job Notification-%job_owner%.%job_name%-%event_type%',
body => SYS_CONTEXT('USERENV','SERVER_HOST') || ' ' || 
    SYS_CONTEXT('USERENV','INSTANCE_NAME') || ' ****** ' ||
    '%event_type% occurred at %event_timestamp%. %error_message%',
events => 'JOB_FAILED, JOB_BROKEN, JOB_DISABLED, JOB_SCH_LIM_REACHED');
end;


Modifichiamo il Job in modo che vada in errore.

begin
dbms_scheduler.set_attribute( 
name => 'JOB_INSERISCI_CONTRATTI',
attribute => 'job_action', 
value =>  'insert into bibi.Contratti values ( , ''Contratto'', sysdate, null, sysdate, 178);'
);
end;
/

Riceveremo via email contente nome del sever, dell'istanza e del tipo di errore Oracle.



Per rimuovere l'invio delle email di notifica usare la seguente procedura.


BEGIN
 DBMS_SCHEDULER.REMOVE_JOB_EMAIL_NOTIFICATION (
  job_name   =>  'JOB_INSERISCI_CONTRATTI',
  recipients =>  'dylandog@studio.it',
  events     =>  'JOB_DISABLED, JOB_SCH_LIM_REACHED');
END;
/

Post popolari in questo blog

Create e Drop Pluggable Database

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione