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

Le planificateur de base de données fournit un mécanisme de notification par e-mail 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 de gestionnaire de notifications de travail 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 en cours d'exécution 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 de planificateur dans une instance Autonomous Database.

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

Reportez-vous à DBMS_SCHEDULER pour plus d'informations sur Oracle 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 sur les travaux

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 à SEND_MESSAGE Procédure.

    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

    Un élément ORA-27405 est renvoyé lorsque vous indiquez un nom de propriétaire ou d'objet non valide comme procédure de gestionnaire de notifications de travail.

    Les procédures DBMS_SCHEDULER existantes ADD_JOB_EMAIL_NOTIFICATION et REMOVE_JOB_EMAIL_NOTIFICATION ont été 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 du 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.

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

L'attribut JOB_NOTIFICATION_HANDLER et l'attribut 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 à SET_SCHEDULER_ATTRIBUTE Procédure.

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 autoriser d'autres utilisateurs à utiliser le gestionnaire de notifications de travail. Exemple :

GRANT EXECUTE ON ADMIN.SEND_NOTIFICATION To DWUSER;

L'erreur ORA-27476 ("\"%s\".\"%s\" does not exist") ou ORA-27486 ("insufficient privileges") est générée si vous ne disposez pas du privilège sur 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 de 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 de gestionnaire de notifications de travail et d'envoyer une notification. Toutefois, ces notifications ne sont pas envoyées sous la forme d'un e-mail 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 indiquer 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 à CREATE_JOB Procédure.

  2. Configurez le travail pour qu'il envoie des notifications à des é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 qu'un des événements d'état de travail spécifiés est déclenché.

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

  3. Activer le travail du planificateur.
    EXEC DBMS_SCHEDULER.ENABLE('DWUSER.MY_JOB');

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

    Lorsque vous activez le travail DWUSER.MY_JOB, la vue USER_SCHEDULER_NOTIFICATIONS est alimentée avec les entrées de notification de travail. Pour vérifier, vous pouvez interroger la vue USER_SCHEDULER_NOTIFICATIONS. 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, voir USER_SCHEDULER_NOTIFICATIONS Vue.

    Lorsque le travail DWUSER.MY_JOB est exécuté et que l'un des événements d'état de travail indiqués est déclenché, la procédure du gestionnaire de notifications de travail est déclenchée et reçoit les informations indiquées en tant qu'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. Enlevez la notification de travail. Exemples :
    EXEC DBMS_SCHEDULER.REMOVE_JOB_EMAIL_NOTIFICATION('DWUSER.MY_JOB');

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

Annuler l'enregistrement 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;
/