Gestionnaire d'avis défini par l'utilisateur pour les tâches du programmateur

Database Scheduler 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 du gestionnaire de notifications du travail du planificateur PL/SQL définie par l'utilisateur.

L'ajout d'une procédure de programme de traitement des avis de tâche du programmateur vous permet de surveiller les tâches programmées ou automatisées exécutées dans votre base de données IA autonome.

À propos du gestionnaire d'avis défini par l'utilisateur pour les tâches du programmateur

Le programmateur de base de données prend en charge la procédure du programme de traitement des avis de tâche qui peut utiliser du code personnalisé pour appeler des points d'extrémité HTTP ou REST afin d'améliorer la surveillance des tâches du programmateur dans une instance de base de données d'intelligence artificielle autonome.

La procédure du programme de traitement reçoit toutes les informations pertinentes concernant le travail, telles que le nom du responsable 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 prend alors l'action requise.

Pour plus d'informations sur Oracle Scheduler, voir DBMS_SCHEDULER.

La configuration du gestionnaire d'avis défini par l'utilisateur pour les tâches du programmateur comprend les étapes suivantes :

Procédure de création d'un programme de traitement d'avis d'emploi

Fournit les étapes de création d'un programme de traitement d'avis de tâche.

  1. Créez un objet de données d'identification.
  2. Créez un gestionnaire d'avis de tâche :

    Exemple de création d'une procédure de gestionnaire d'avis de tâche 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, voir Envoyer des avis Slack à partir d'une base de données autonome sur l'IA.

    Pour plus d'informations, voir ProcédureSEND_MESSAGE.

    Exemple de création d'une procédure de gestionnaire d'avis de tâche 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 programme de traitement d'avis de tâche.

    Note

    Une valeur ORA-27405 est retournée lorsque vous spécifiez un nom de responsable ou d'objet non valide comme procédure du programme de traitement des avis de tâche.

    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 programme de traitement des avis de tâche.

    Pour plus d'informations, voir 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 avis pour une tâche de programmateur. Pour plus d'informations, voir DBA_SCHEDULER_NOTIFICATIONS.

Enregistrer la procédure d'avis du programme de traitement des tâches

Utilisez la procédure DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE pour définir la valeur d'attribut JOB_NOTIFICATION_HANDLER pour enregistrer la procédure d'avis du programme de traitement de tâches.

L'attribut JOB_NOTIFICATION_HANDLER spécifie la procédure d'avis du programme de traitement de tâches à 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 programme de traitement 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 avis par courriel ou à créer votre programme de traitement des avis pour vos tâches de programmateur.

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

Exécutez la procédure DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE pour enregistrer la procédure d'avis du programme de traitement de tâches :

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 d'avis du programme de traitement de tâches pour votre base de données.

Pour plus d'informations, voir ProcédureSET_SCHEDULER_ATTRIBUTE.

Exécutez cette commande pour vérifier le programme de traitement des avis de tâche :


SELECT value FROM dba_scheduler_global_attribute WHERE attribute_name='JOB_NOTIFICATION_HANDLER';

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

Pour plus d'informations, voir DBA_SCHEDULER_GLOBAL_ATTRIBUTE.

Vous devez affecter le privilège EXECUTE pour permettre à d'autres utilisateurs d'utiliser le programme de traitement des avis de tâche. 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 de privilèges sur la procédure d'avis du programme de traitement de tâches.

Déclencher la procédure d'avis du programme de traitement des tâches

Vous devez appeler la procédure DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION pour déclencher la procédure du programme de traitement des avis de tâche définie par l'utilisateur.

Le formulaire surchargé de DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION vous permet de déclencher la procédure du programme de traitement des avis de tâche et d'envoyer un avis. Toutefois, ces notifications ne sont pas envoyées sous forme de courriel lorsque vous avez enregistré la procédure du programme de traitement des notifications d'emploi. Par conséquent, les paramètres SUBJECT et BODY sont facultatifs. Le paramètre RECIPIENT est toujours obligatoire. Comme ce mode de procédure surchargé n'envoie pas d'avis 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 programmateur, d'ajouter une notification pour le travail, d'activer le travail, de vérifier les entrées d'avis, d'afficher les données reçues par la procédure du gestionnaire d'avis de travail et de supprimer l'avis pour le travail.
  1. Créez un travail de programmateur 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 une tâche DWUSER.MY_JOB avec les attributs spécifiés.

    Pour plus d'informations, voir ProcédureCREATE_JOB.

  2. Configurez la tâche pour l'envoi d'avis 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 avis pour la tâche DWUSER.MY_JOB. Les avis sont envoyés chaque fois qu'un des événements d'état de tâche spécifiés est déclenché.

    Pour plus d'informations, voir ProcédureADD_JOB_EMAIL_NOTIFICATION.

  3. Activez le travail du programmateur.
    EXEC DBMS_SCHEDULER.ENABLE('DWUSER.MY_JOB');

    Pour plus d'informations, voir Procédure ENABLE.

    Lorsque vous activez la tâche DWUSER.MY_JOB, la vue USER_SCHEDULER_NOTIFICATIONS est alimentée avec les entrées d'avis de tâche. Pour vérifier que 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 Vue USER_SCHEDULER_NOTIFICATIONS.

    Lorsque la tâche DWUSER.MY_JOB est exécutée et que l'un des événements d'état de tâche spécifiés est déclenché, la procédure du programme de traitement des avis de tâche est déclenchée et reçoit les informations spécifiées en tant qu'entrée. Par exemple, la procédure du programme de traitement des avis de tâche 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. Supprimer l'avis de tâche. Exemple :
    EXEC DBMS_SCHEDULER.REMOVE_JOB_EMAIL_NOTIFICATION('DWUSER.MY_JOB');

    Pour plus d'informations, voir ProcédureREMOVE_JOB_EMAIL_NOTIFICATION.

Procédure de désinscription de l'avis du programme de traitement de tâches

Utilisez DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE pour désinscrire la procédure d'avis du programme de traitement de tâches.

Pour désinscrire la procédure d'avis du programme de traitement de tâches, vous devez être connecté en tant qu'utilisateur ADMIN ou disposer du privilège MANAGE SCHEDULER.

Exemple d'annulation de l'enregistrement de la procédure de notification du gestionnaire de travaux :

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