Handler di notifiche definito dall'utente per i processi scheduler

Lo scheduler di database fornisce un meccanismo di notifica e-mail per tenere traccia dello stato dei job periodicamente in esecuzione o automatici. Oltre a questo, lo scheduler di database supporta anche la procedura dell'handler di notifiche del job PL/SQL Scheduler definita dall'utente.

L'aggiunta di una procedura di handler delle notifiche dei job dello scheduler consente di monitorare i job pianificati o automatici in esecuzione in Autonomous Database.

Informazioni sull'handler di notifiche definito dall'utente per i processi scheduler

Lo scheduler del database supporta la procedura dell'handler di notifiche dei job che può utilizzare il codice personalizzato per chiamare gli endpoint HTTP o REST per migliorare il monitoraggio dei job dello scheduler in un'istanza di Autonomous Database.

La procedura handler riceve tutte le informazioni pertinenti relative al job, ad esempio il nome del proprietario del job, il nome della classe, il tipo di evento e l'indicatore orario in formato JSON. In base alle informazioni, la procedura del gestore esegue quindi l'azione richiesta.

Per ulteriori informazioni su Oracle Scheduler, vedere DBMS_SCHEDULER.

La configurazione dell'handler di notifiche definito dall'utente per i job dello scheduler è costituita dai passi riportati di seguito.

Procedura di creazione di un handler di notifiche job

Fornisce i passi per creare un handler di notifiche job.

  1. Creare un oggetto credenziali.

    Per ulteriori informazioni, vedere CREATE_CREDENTIAL Procedura.

    Per ulteriori informazioni, vedere Specifica delle credenziali del job dello scheduler.

  2. Creare un handler di notifiche job:

    Esempio di creazione di una procedura di handler di notifiche job per l'invio di un messaggio a un canale Slack:

    CREATE OR REPLACE PROCEDURE ADMIN.SEND_NOTIFICATION(data_in CLOB) AS
    BEGIN
      DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE (
        provider          => 'slack',
        credential_name   => 'SLACK_CRED',
        message           => data_in,
        params            => JSON_OBJECT('channel' value 'adw-job-nfy');
    end;
    /

    In questo esempio viene creata la procedura SEND_NOTIFICATION.

    Questa procedura definita dall'utente invia i dati di input forniti come messaggio al canale Slack specificato.

    Per ulteriori informazioni, consulta la sezione Invia notifiche Slack da Autonomous Database.

    Per ulteriori informazioni, vedere SEND_MESSAGE Procedura.

    Esempio di procedura di creazione di un handler di notifiche job per inserire il messaggio in una tabella:

    CREATE TABLE ADMIN.JOB_STATUS(jnfy_data CLOB);
    
    CREATE OR REPLACE PROCEDURE ADMIN.INSERT_JOB_STATUS(data_in CLOB) AS
      l_sessuser VARCHAR2(128) := SYS_CONTEXT('userenv','session_user');
    BEGIN
      INSERT INTO ADMIN.JOB_STATUS (jnfy_data) VALUES (data_in || TO_CLOB(' : Sent By Session User : ' || l_sessuser));
      COMMIT;
    END;
    /

    In questo esempio vengono create la tabella JOB_STATUS e la procedura INSERT_JOB_STATUS per inserire nella tabella i valori specifici della sessione.

    Per creare una procedura di handler delle notifiche job, è necessario aver eseguito il login come utente ADMIN o disporre del privilegio di sistema CREATE ANY PROCEDURE.

    Nota

    Quando si specifica un proprietario o un nome oggetto non valido come procedura dell'handler di notifiche job, viene restituito un valore ORA-27405.

    Le procedure DBMS_SCHEDULER esistenti ADD_JOB_EMAIL_NOTIFICATION e REMOVE_JOB_EMAIL_NOTIFICATION sono state migliorate per supportare la procedura dell'handler di notifiche dei job.

    Per ulteriori informazioni, vedere ADD_JOB_EMAIL_NOTIFICATION Procedura e REMOVE_JOB_EMAIL_NOTIFICATION Procedura.

    Utilizzare la vista del dizionario DBA_SCHEDULER_NOTIFICATIONS per eseguire una query sulla lista di notifiche per un job dello scheduler. Vedere DBA_SCHEDULER_NOTIFICATIONS.

Registrazione della procedura di notifica dell'handler di job

Utilizzare la procedura DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE per impostare il valore dell'attributo JOB_NOTIFICATION_HANDLER per registrare la procedura di notifica dell'handler di job.

L'attributo JOB_NOTIFICATION_HANDLER specifica la procedura di notifica dell'handler di job che si desidera utilizzare.

Per registrare la procedura di notifica dell'handler di job, è necessario:
  • Eseguire il login come utente ADMIN o disporre del privilegio MANAGE SCHEDULER.

  • Disporre del privilegio EXECUTE sulla procedura del gestore o sul privilegio di sistema EXECUTE ANY PROCEDURE.

Gli attributi JOB_NOTIFICATION_HANDLER e EMAIL_SERVER si escludono a vicenda. Il parametro ATTRIBUTE della procedura SET_SCHEDULER_ATTRIBUTE può avere contemporaneamente il valore JOB_NOTIFICATION_HANDLER o EMAIL_SERVER. È possibile configurare le notifiche e-mail o creare l'handler di notifiche per i job dello scheduler.

Viene generato un errore ORA-27488 quando si tenta di impostare sia gli attributi globali EMAIL_SERVER che JOB_NOTIFICATION_HANDLER.

Eseguire la procedura DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE per registrare la procedura di notifica dell'handler di job:

BEGIN
  DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE('job_notification_handler','ADMIN.SEND_NOTIFICATION');
END;
/

In questo esempio viene registrata la procedura ADMIN.SEND_NOTIFICATION come procedura di notifica dell'handler di job per il database.

Per ulteriori informazioni, vedere SET_SCHEDULER_ATTRIBUTE Procedura.

Eseguire questo comando per verificare l'handler di notifiche job:


SELECT value FROM dba_scheduler_global_attribute WHERE attribute_name='JOB_NOTIFICATION_HANDLER';

VALUE
---------------
"ADMIN"."SEND_NOTIFICATION"

È necessario assegnare il privilegio EXECUTE per consentire ad altri utenti di utilizzare l'handler di notifiche job. Ad esempio:

GRANT EXECUTE ON ADMIN.SEND_NOTIFICATION To DWUSER;

Viene restituito un errore ORA-27476 ("\"%s\".\"%s\" does not exist") o ORA-27486 ("insufficient privileges") se non si dispone dei privilegi per la procedura di notifica dell'handler di job.

Procedura di attivazione della notifica dell'handler di job

È necessario chiamare la procedura DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION per attivare la procedura dell'handler di notifiche job definito dall'utente.

Il form sovraccarico del file DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION consente di attivare la procedura dell'handler di notifiche job e di inviare una notifica. Tuttavia, queste notifiche non vengono inviate sotto forma di e-mail quando si è registrata la procedura del gestore delle notifiche di job. Pertanto, i parametri SUBJECT e BODY sono facoltativi. Il parametro RECIPIENT è ancora obbligatorio. Poiché questo modulo di procedura sovraccarico non invia notifiche e-mail, è possibile fornire qualsiasi valore di stringa per il parametro RECIPIENT.
Ad esempio, i passi riportati di seguito consentono di creare un job dello scheduler, aggiungere una notifica per il job, abilitare il job, verificare le voci di notifica, visualizzare i dati ricevuti dalla procedura dell'handler di notifiche del job e rimuovere la notifica per il job.
  1. Creare un job dello scheduler nello schema DWUSER:
    BEGIN
     DBMS_SCHEDULER.CREATE_JOB(
       job_name   => 'DWUSER.MY_JOB',
       job_type   => 'PLSQL_BLOCK',
       job_action => 'BEGIN null; END;',
       enabled    => FALSE,
       auto_drop  => FALSE);
    END;
    /

    Viene creato un job DWUSER.MY_JOB con gli attributi specificati.

    Per ulteriori informazioni, vedere CREATE_JOB Procedura.

  2. Configurare il job per l'invio delle notifiche in corrispondenza degli eventi specificati.
    BEGIN
      DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION(
        job_name   => 'DWUSER.MY_JOB',
        recipients => 'PLACEHOLDER_STRING',
        subject    => 'Job Notification-%job_owner%.%job_name%-%event_type%',
        body       => '%event_type% occurred at %event_timestamp%. %error_message%',
        events     => 'job_started, job_succeeded, job_completed');
    END;
    /

    Questa procedura aggiunge le notifiche per il job DWUSER.MY_JOB. Le notifiche vengono inviate ogni volta che viene generato uno qualsiasi degli eventi di stato del job specificati.

    Per ulteriori informazioni, vedere ADD_JOB_EMAIL_NOTIFICATION Procedura.

  3. Abilita il processo dello scheduler.
    EXEC DBMS_SCHEDULER.ENABLE('DWUSER.MY_JOB');

    Per ulteriori informazioni, vedere Procedura ENABLE.

    Quando si abilita il job DWUSER.MY_JOB, la vista USER_SCHEDULER_NOTIFICATIONS viene popolata con le voci di notifica del job. Per verificare è possibile eseguire una query sulla vista USER_SCHEDULER_NOTIFICATIONS. Ad esempio:
    SELECT  job_name, recipient, event, subject, body
    FROM user_scheduler_notifications
    ORDER BY notification_owner, owner, job_name;
    
    JOB_NAME    RECIPIENT            EVENT          SUBJECT         BODY
    -------    ------------------   -------------  --------------- ---------------
    MY_JOB     placeholder_string   JOB_STARTED    Job Notificatio %event_type% oc
                                                   n-%job_owner%.% curred at %even
                                                   job_name%-%even t_timestamp%. %
                                                   t_type%         error_message%
    
    MY_JOB     placeholder_string  JOB_SUCCEEDED    Job Notificatio %event_type% oc
                                                    n-%job_owner%.% curred at %even
                                                    job_name%-%even t_timestamp%. %
                                                    t_type%         error_message%
     	
    MY_JOB    placeholder_string  JOB_COMPLETED    Job Notificatio %event_type% oc
                                                   n-%job_owner%.% curred at %even
                                                   job_name%-%even t_timestamp%. %
                                                   t_type%         error_message%

    Per ulteriori informazioni, vedere USER_SCHEDULER_NOTIFICATIONS View.

    Quando il job DWUSER.MY_JOB viene eseguito e viene generato uno qualsiasi degli eventi di stato del job specificati, la procedura dell'handler di notifiche del job viene attivata e riceve le informazioni specificate come input. Ad esempio, la procedura dell'handler di notifiche job ADMIN.SEND_NOTIFICATION riceve quanto riportato di seguito.

    {"job_owner":"DWUSER","job_name":"MY_JOB","job_class_name":"DEFAULT_JOB_CLA
    SS","event_type":"JOB_STARTED","event_timestamp":"12-JAN-23 08.13.46.193306
     PM UTC","error_code":0,"error_msg":null,"sender":null,"recipient":"data_lo
    ad_pipeline","subject":"Job Notification-DWUSER.MY_JOB-JOB_STARTED","msg_te
    xt":"JOB_STARTED occurred at 12-JAN-23 08.13.46.193306 PM UTC. ","comments"
    :"User defined job notification handler"}
     
    {"job_owner":"DWUSER","job_name":"MY_JOB","job_class_name":"DEFAULT_JOB_CLA
    SS","event_type":"JOB_SUCCEEDED","event_timestamp":"12-JAN-23 08.13.46.2863
    44 PM UTC","error_code":0,"error_msg":null,"sender":null,"recipient":"data_
    load_pipeline","subject":"Job Notification-DWUSER.MY_JOB-JOB_SUCCEEDED","ms
    g_text":"JOB_SUCCEEDED occurred at 12-JAN-23 08.13.46.286344 PM UTC. ","com
    ments":"User defined job notification handler"}
    
  4. Rimuovere la notifica del job. Ad esempio:
    EXEC DBMS_SCHEDULER.REMOVE_JOB_EMAIL_NOTIFICATION('DWUSER.MY_JOB');

    Per ulteriori informazioni, vedere REMOVE_JOB_EMAIL_NOTIFICATION Procedura.

Procedura di annullamento della registrazione della notifica dell'handler di job

Utilizzare DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE per annullare la registrazione della procedura di notifica dell'handler di job.

Per annullare la registrazione della procedura di notifica dell'handler di job, è necessario aver eseguito il login come utente ADMIN o disporre del privilegio MANAGE SCHEDULER.

Esempio di annullamento della registrazione della procedura di notifica dell'handler di job:

BEGIN
  DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE ('job_notification_handler','');
END;
/