Gestionnaire de notifications défini par l'utilisateur pour les travaux du programmateur

Le planificateur de base de données fournit un mécanisme de notification par courriel pour suivre le statut des travaux en cours d'exécution périodique ou automatisés. En outre, le planificateur de base de données prend également en charge la procédure du gestionnaire de notifications de travaux du planificateur PL/SQL définie par l'utilisateur.

L'ajout d'une procédure de gestionnaire de notifications de travail de planificateur vous permet de surveiller les travaux programmés ou automatisés exécutés dans votre instance Autonomous Database.

A propos du gestionnaire de notifications défini par l'utilisateur pour les travaux du planificateur

Le planificateur de base de données prend en charge la procédure de gestionnaire de notifications de travail qui peut utiliser du code personnalisé pour appeler des adresses HTTP ou REST afin d'améliorer la surveillance des travaux du planificateur dans une instance Autonomous Database.

La procédure du gestionnaire reçoit toutes les informations pertinentes concernant le travail, telles que le nom du propriétaire du travail, le nom de classe, le type d'événement et l'horodatage au format JSON. En fonction des informations, la procédure du gestionnaire effectue ensuite l'action requise.

Pour plus d'informations sur Oracle Scheduler, reportez-vous à DBMS_SCHEDULER.

La configuration du gestionnaire de notifications défini par l'utilisateur pour les travaux du planificateur comprend les étapes suivantes :

Créer une procédure de gestionnaire de notifications de travail

Fournit les étapes de création d'un gestionnaire de notifications de travail.

  1. Créez un objet d'informations d'identification.

    Pour plus d'informations, reportez-vous à Procédure CREATE_CREDENTIAL.

    Pour plus d'informations, reportez-vous à Spécification des informations d'identification de travail du planificateur.

  2. Créez un gestionnaire de notifications de travail :

    Exemple de création d'une procédure de gestionnaire de notifications de travail pour envoyer un message à un canal 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;
    /

    Cet exemple crée la procédure SEND_NOTIFICATION.

    Cette procédure définie par l'utilisateur envoie les données d'entrée fournies sous forme de message au canal Slack spécifié.

    Pour plus d'informations, reportez-vous à Envoi de notifications Slack à partir d'Autonomous Database.

    Pour plus d'informations, reportez-vous à Procédure SEND_MESSAGE.

    Exemple de création d'une procédure de gestionnaire de notifications de travail pour insérer le message dans une table :

    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;
    /

    Cet exemple crée la table JOB_STATUS et la procédure INSERT_JOB_STATUS pour insérer les valeurs propres à la session dans la table.

    Vous devez être connecté en tant qu'utilisateur ADMIN ou disposer du privilège système CREATE ANY PROCEDURE pour créer une procédure de gestionnaire de notifications de travail.

    Remarque

    Une valeur ORA-27405 est renvoyée lorsque vous indiquez un nom de propriétaire ou d'objet non valide en tant que procédure de gestionnaire de notifications de travail.

    Les procédures DBMS_SCHEDULER existantes ADD_JOB_EMAIL_NOTIFICATION et REMOVE_JOB_EMAIL_NOTIFICATION sont améliorées pour prendre en charge la procédure du gestionnaire de notifications de travail.

    Pour plus d'informations, reportez-vous à Procédure ADD_JOB_EMAIL_NOTIFICATION et à Procédure REMOVE_JOB_EMAIL_NOTIFICATION.

    Utilisez la vue de dictionnaire DBA_SCHEDULER_NOTIFICATIONS pour interroger la liste des notifications d'un travail de planificateur. Pour plus d'informations, reportez-vous à DBA_SCHEDULER_NOTIFICATIONS.

Enregistrer la procédure de notification du gestionnaire de travaux

Utilisez la procédure DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE pour définir la valeur d'attribut JOB_NOTIFICATION_HANDLER afin d'inscrire la procédure de notification du gestionnaire de travaux.

L'attribut JOB_NOTIFICATION_HANDLER indique la procédure de notification du gestionnaire de travaux à utiliser.

Pour enregistrer la procédure de notification du gestionnaire de travaux, vous devez :
  • Connectez-vous en tant qu'utilisateur ADMIN ou disposez du privilège MANAGE SCHEDULER.

  • Vous disposez du privilège EXECUTE sur la procédure du gestionnaire ou du privilège système EXECUTE ANY PROCEDURE.

Les attributs JOB_NOTIFICATION_HANDLER et EMAIL_SERVER s'excluent mutuellement. Le paramètre ATTRIBUTE de la procédure SET_SCHEDULER_ATTRIBUTE peut avoir la valeur JOB_NOTIFICATION_HANDLER ou EMAIL_SERVER à la fois. Vous êtes autorisé à configurer des notifications par courriel ou à créer votre gestionnaire de notifications pour vos travaux de planificateur.

Une erreur ORA-27488 est générée lorsque vous tentez de définir les attributs globaux EMAIL_SERVER et JOB_NOTIFICATION_HANDLER.

Exécutez la procédure DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE pour enregistrer la procédure de notification du gestionnaire de travaux :

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

Cet exemple enregistre la procédure ADMIN.SEND_NOTIFICATION en tant que procédure de notification du gestionnaire de travaux pour votre base de données.

Pour plus d'informations, reportez-vous à Procédure SET_SCHEDULER_ATTRIBUTE.

Exécutez cette commande pour vérifier le gestionnaire de notifications de travail :


SELECT value FROM dba_scheduler_global_attribute WHERE attribute_name='JOB_NOTIFICATION_HANDLER';

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

Pour plus d'informations, reportez-vous à DBA_SCHEDULER_GLOBAL_ATTRIBUTE.

Vous devez affecter le privilège EXECUTE pour permettre aux autres utilisateurs d'utiliser le gestionnaire de notifications de travail. Par exemple :

GRANT EXECUTE ON ADMIN.SEND_NOTIFICATION To DWUSER;

Une erreur ORA-27476 ("\"%s\".\"%s\" does not exist") ou ORA-27486 ("insufficient privileges") est générée si vous ne disposez pas des privilèges requis pour la procédure de notification du gestionnaire de travaux.

Déclencher la procédure de notification du gestionnaire de travaux

Vous devez appeler la procédure DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION pour déclencher la procédure du gestionnaire de notifications de travail définie par l'utilisateur.

La forme surchargée de DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION vous permet de déclencher la procédure du gestionnaire de notifications de travail et d'envoyer une notification. Toutefois, ces notifications ne sont pas envoyées sous la forme d'un courriel lorsque vous avez enregistré la procédure du gestionnaire de notifications de travail. Par conséquent, les paramètres SUBJECT et BODY sont facultatifs. Le paramètre RECIPIENT est toujours obligatoire. Comme ce type de procédure surchargé n'envoie pas de notifications par courriel, vous pouvez fournir n'importe quelle valeur de chaîne pour le paramètre RECIPIENT.
Par exemple, les étapes suivantes permettent de créer un travail de planificateur, d'ajouter une notification pour le travail, d'activer le travail, de vérifier les entrées de notification, d'afficher les données reçues par la procédure du gestionnaire de notifications de travail et de supprimer la notification pour le travail.
  1. Créez un travail de planificateur dans le schéma 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;
    /

    Cela crée un travail DWUSER.MY_JOB avec les attributs indiqués.

    Pour plus d'informations, reportez-vous à Procédure CREATE_JOB.

  2. Configurez le travail pour envoyer des notifications aux événements spécifiés.
    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;
    /

    Cette procédure ajoute des notifications pour le travail DWUSER.MY_JOB. Les notifications sont envoyées chaque fois que l'un des événements d'état de travail spécifiés est déclenché.

    Pour plus d'informations, reportez-vous à Procédure ADD_JOB_EMAIL_NOTIFICATION.

  3. Activez le travail de planificateur.
    EXEC DBMS_SCHEDULER.ENABLE('DWUSER.MY_JOB');

    Pour plus d'informations, reportez-vous à Procédure ACTIVABLE.

    Lorsque vous activez le travail DWUSER.MY_JOB, les entrées de notification de travail sont renseignées dans la vue USER_SCHEDULER_NOTIFICATIONS. Pour vérifier, vous pouvez interroger la vue USER_SCHEDULER_NOTIFICATIONS. Par exemple :
    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%

    Pour plus d'informations, reportez-vous à USER_SCHEDULER_NOTIFICATIONS View.

    Lorsque le travail DWUSER.MY_JOB est exécuté et que l'un des événements d'état de travail indiqués est appelé, la procédure du gestionnaire de notifications de travail est déclenchée et reçoit les informations indiquées en entrée. Par exemple, la procédure du gestionnaire de notifications de travail ADMIN.SEND_NOTIFICATION reçoit les informations suivantes :

    {"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. Supprimez la notification de travail. Par exemple :
    EXEC DBMS_SCHEDULER.REMOVE_JOB_EMAIL_NOTIFICATION('DWUSER.MY_JOB');

    Pour plus d'informations, reportez-vous à Procédure REMOVE_JOB_EMAIL_NOTIFICATION.

Désinscription de la procédure de notification du gestionnaire de travaux

Utilisez DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE pour désinscrire la procédure de notification du gestionnaire de travaux.

Pour désinscrire la procédure de notification du gestionnaire de travaux, vous devez être connecté en tant qu'utilisateur ADMIN ou disposer du privilège MANAGE SCHEDULER.

Exemple de désinscription de la procédure de notification du gestionnaire de travaux :

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