Handler di notifiche definito dall'utente per i processi scheduler

Database Scheduler fornisce un meccanismo di notifica e-mail per tenere traccia dello stato dei processi periodicamente in esecuzione o automatizzati. Oltre a ciò, lo scheduler del database supporta anche la procedura di handler delle 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 automatizzati in esecuzione in Autonomous Database.

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

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

La procedura di gestione 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 consiste nei 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 credenziale.

    Per ulteriori informazioni, vedere CREATE_CREDENTIAL Procedure.

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

  2. Creare un handler di notifiche di job:

    Esempio per creare una procedura di gestione delle notifiche di job per inviare 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 Procedure.

    Esempio per creare una procedura di gestione delle 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 i valori specifici della sessione nella tabella.

    È necessario aver eseguito il login come utente ADMIN o disporre del privilegio di sistema CREATE ANY PROCEDURE per creare una procedura di gestione delle notifiche di job.

    Nota

    Quando si specifica un nome di proprietario o oggetto non valido come procedura di gestione delle notifiche del 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 di gestione delle notifiche dei job.

    Per ulteriori informazioni, vedere ADD_JOB_EMAIL_NOTIFICATION Procedure e REMOVE_JOB_EMAIL_NOTIFICATION Procedure.

    Utilizzare la vista dizionario DBA_SCHEDULER_NOTIFICATIONS per eseguire una query sull'elenco di notifiche per un job scheduler. Per ulteriori informazioni, 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.

  • Avere il privilegio EXECUTE sulla procedura dell'handler 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. Si è autorizzati a configurare le notifiche e-mail o a creare l'handler di notifiche per i job scheduler.

Viene generato un errore ORA-27488 quando si tenta di impostare gli attributi globali EMAIL_SERVER e 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 Procedure.

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


SELECT value FROM dba_scheduler_global_attribute WHERE attribute_name='JOB_NOTIFICATION_HANDLER';

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

Per ulteriori informazioni, vedere DBA_SCHEDULER_GLOBAL_ATTRIBUTE.

È necessario assegnare il privilegio EXECUTE per consentire ad altri utenti di utilizzare l'handler di notifiche dei 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 del privilegio per la procedura di notifica dell'handler di job.

Attiva la procedura di notifica dell'handler di job

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

Il modulo sovraccarico di DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION consente di attivare la procedura di gestione delle notifiche del job e di inviare una notifica. Tuttavia, queste notifiche non vengono inviate sotto forma di e-mail quando si è registrata la procedura di gestione delle notifiche del 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 stringa per il parametro RECIPIENT.
Ad esempio, i passi riportati di seguito creano un job scheduler, aggiungono una notifica per il job, abilitano il job, verificano le voci di notifica, mostrano i dati ricevuti dalla procedura di handler delle notifiche del job e rimuovono la notifica per il job.
  1. Creare un job 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;
    /

    In questo modo viene creato un job DWUSER.MY_JOB con gli attributi specificati.

    Per ulteriori informazioni, vedere CREATE_JOB Procedure.

  2. Configurare il job per l'invio di notifiche negli 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 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 Procedure.

  3. Abilita il job 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 di gestione delle 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 Procedure.

Annulla registrazione della procedura di 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 eseguire il login come utente ADMIN o disporre del privilegio MANAGE SCHEDULER.

Esempio per annullare la registrazione della procedura di notifica dell'handler di job:

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