Manejador de notificaciones definido por el usuario para trabajos de programador
Database Scheduler proporciona un mecanismo de notificación por correo electrónico para realizar un seguimiento del estado de los trabajos automatizados o en ejecución periódica. Además, Database Scheduler también soporta el procedimiento de manejador de notificaciones de trabajos del programador PL/SQL definido por el usuario.
La adición de un procedimiento de manejador de notificaciones de trabajos del programador le permite supervisar los trabajos programados o automatizados que se ejecutan en su base de datos de IA autónoma.
Acerca del Manejador de notificaciones definido por el usuario para trabajos de programador
Database Scheduler soporta el procedimiento de manejador de notificaciones de trabajos que puede utilizar código personalizado para llamar a puntos finales HTTP o REST para mejorar la supervisión de los trabajos del programador en una instancia de base de datos de IA autónoma.
El procedimiento de manejador recibe toda la información pertinente relativa al trabajo, como el nombre del propietario del trabajo, el nombre de clase, el tipo de evento y el registro de hora en formato JSON. Según la información, el procedimiento del manejador realiza la acción necesaria.
Consulte DBMS_SCHEDULER para obtener más información sobre Oracle Scheduler.
La configuración del manejador de notificaciones definido por el usuario para los trabajos del programador consta de los siguientes pasos:
-
Cree un procedimiento de manejador de notificaciones de trabajo como se describe en:Creación de un Procedimiento de Manejador de Notificación de Trabajo.
-
Registre el procedimiento del manejador de notificaciones de trabajos para la base de datos como se describe en:Register the Job Handler Notification Procedure.
-
Disparar el procedimiento del manejador de notificaciones de trabajos como se describe en:Disparar el Procedimiento de Notificación del Manejador de Trabajos
-
Anule el registro del procedimiento del manejador de notificaciones de trabajos para la base de datos como se describe en:Anular el registro del procedimiento de notificación del manejador de trabajos.
Creación de un Procedimiento de Manejador de Notificación de Trabajo
Proporciona pasos para crear un manejador de notificaciones de trabajos.
-
Cree un objeto de credencial.
Consulte Procedimiento CREATE_CREDENTIAL para obtener más información.
Consulte Especificación de Credenciales de Trabajo del Planificador para obtener más información.
-
Cree un manejador de notificaciones Job:
Ejemplo para crear un procedimiento de manejador de notificaciones de trabajos para enviar un mensaje a un canal de 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; /En este ejemplo, se crea el procedimiento
SEND_NOTIFICATION.Este procedimiento definido por el usuario envía los datos de entrada proporcionados como un mensaje al canal de Slack especificado.
Consulte Envío de notificaciones de Slack desde Autonomous AI Database para obtener más información.
Consulte Procedimiento SEND_MESSAGE para obtener más información.
Ejemplo para crear un procedimiento de manejador de notificaciones de trabajo para insertar el mensaje en una tabla:
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; /En este ejemplo se crea la tabla
JOB_STATUSy el procedimientoINSERT_JOB_STATUSpara insertar los valores específicos de la sesión en la tabla.Debe estar conectado como usuario ADMIN o tener el privilegio del sistema
CREATE ANY PROCEDUREpara crear un procedimiento de manejador de notificaciones de trabajos.Nota
Nota: Se devuelveORA-27405al especificar un nombre de objeto o propietario no válido como procedimiento del manejador de notificaciones de trabajos.Los procedimientos
DBMS_SCHEDULERexistentesADD_JOB_EMAIL_NOTIFICATIONyREMOVE_JOB_EMAIL_NOTIFICATIONse han mejorado para soportar el procedimiento del manejador de notificaciones de trabajos.Consulte Procedimiento ADD_JOB_EMAIL_NOTIFICATION y Procedimiento REMOVE_JOB_EMAIL_NOTIFICATION para obtener más información.
Utilice la vista de diccionario
DBA_SCHEDULER_NOTIFICATIONSpara consultar la lista de notificaciones de un trabajo del programador. Consulte DBA_SCHEDULER_NOTIFICATIONS para obtener más información.
Registro del Procedimiento de Notificación del Manejador de Trabajos
Utilice el procedimiento DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE para definir el valor de atributo JOB_NOTIFICATION_HANDLER para registrar el procedimiento de notificación del manejador de trabajos.
El atributo JOB_NOTIFICATION_HANDLER especifica el procedimiento de notificación del manejador de trabajos que desea utilizar.
Para registrar el procedimiento de notificación del manejador de trabajos, debe:
-
Conéctese como usuario ADMIN o tenga el privilegio
MANAGE SCHEDULER. -
Tenga el privilegio
EXECUTEen el procedimiento del manejador o el privilegio del sistemaEXECUTE ANY PROCEDURE.
El atributo JOB_NOTIFICATION_HANDLER y el atributo EMAIL_SERVER se excluyen mutuamente. El parámetro ATTRIBUTE del procedimiento SET_SCHEDULER_ATTRIBUTE puede tener el valor JOB_NOTIFICATION_HANDLER o EMAIL_SERVER a la vez. Puede configurar notificaciones por correo electrónico o crear el manejador de notificaciones para los trabajos del programador.
Se emite un error ORA-27488 al intentar definir los atributos globales EMAIL_SERVER y JOB_NOTIFICATION_HANDLER.
Ejecute el procedimiento DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE para registrar el procedimiento de notificación del manejador de trabajos:
BEGIN
DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE('job_notification_handler','ADMIN.SEND_NOTIFICATION');
END;
/En este ejemplo, se registra el procedimiento ADMIN.SEND_NOTIFICATION como procedimiento de notificación del manejador de trabajos para la base de datos.
Consulte Procedimiento SET_SCHEDULER_ATTRIBUTE para obtener más información.
Ejecute este comando para verificar el manejador de notificaciones de trabajos:
SELECT value FROM dba_scheduler_global_attribute WHERE attribute_name='JOB_NOTIFICATION_HANDLER';
VALUE
---------------
"ADMIN"."SEND_NOTIFICATION"Consulte DBA_SCHEDULER_GLOBAL_ATTRIBUTE para obtener más información.
Debe asignar el privilegio EXECUTE para permitir que otros usuarios utilicen el manejador de notificaciones de trabajos. Por ejemplo:
GRANT EXECUTE ON ADMIN.SEND_NOTIFICATION To DWUSER;Si no tiene privilegios en el procedimiento de notificación del manejador de trabajos, se devuelve el error ORA-27476 (""%s"."%s" does not exist") o ORA-27486 ("insufficient privileges").
Disparar el procedimiento de notificación del manejador de trabajos
Debe llamar al procedimiento DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION para disparar el procedimiento del manejador de notificaciones de trabajos definido por el usuario.
El formulario sobrecargado de DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION permite disparar el procedimiento del manejador de notificaciones de trabajos y enviar una notificación. Sin embargo, estas notificaciones no se envían en forma de correo electrónico cuando se ha registrado el procedimiento del manejador de notificaciones de trabajo. Por lo tanto, los parámetros SUBJECT y BODY son opcionales. El parámetro RECIPIENT sigue siendo obligatorio. Dado que esta forma de procedimiento sobrecargada no envía notificaciones por correo electrónico, puede proporcionar cualquier valor de cadena para el parámetro RECIPIENT.
Por ejemplo, los siguientes pasos crean un trabajo del programador, agregan una notificación para el trabajo, activan el trabajo, verifican las entradas de notificación, muestran los datos recibidos por el procedimiento del manejador de notificaciones de trabajo y eliminan la notificación para el trabajo.
- Cree un trabajo del programador en el esquema
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; /Esto crea un trabajo
DWUSER.MY_JOBcon los atributos especificados.Consulte Procedimiento CREATE_JOB para obtener más información.
-
Configure el trabajo para enviar notificaciones en eventos especificados.
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; /Este procedimiento agrega notificaciones para el trabajo
DWUSER.MY_JOB. Las notificaciones se envían cuando se emite cualquiera de los eventos de estado de trabajo especificados.Consulte el procedimiento ADD_JOB_EMAIL_NOTIFICATION para obtener más información.
-
Active el trabajo del programador.
EXEC DBMS_SCHEDULER.ENABLE('DWUSER.MY_JOB');Consulte ENABLE Procedure para obtener más información.
Al activar el trabajo
DWUSER.MY_JOB, la vistaUSER_SCHEDULER_NOTIFICATIONSse rellena con las entradas de notificación de trabajo. Para verificarlo, puede consultar la vistaUSER_SCHEDULER_NOTIFICATIONS. Por ejemplo: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%Consulte la vista USER_SCHEDULER_NOTIFICATIONS para obtener más información.
Cuando se ejecuta el trabajo
DWUSER.MY_JOBy se emite cualquiera de los eventos de estado de trabajo especificados, se dispara el procedimiento del manejador de notificaciones de trabajo y recibe la información especificada como entrada. Por ejemplo, el procedimiento del manejador de notificaciones de trabajosADMIN.SEND_NOTIFICATIONrecibe lo siguiente:{"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"} -
Elimine la notificación de trabajo. Por ejemplo:
EXEC DBMS_SCHEDULER.REMOVE_JOB_EMAIL_NOTIFICATION('DWUSER.MY_JOB');Consulte Procedimiento REMOVE_JOB_EMAIL_NOTIFICATION para obtener más información.
Anular Registro del Procedimiento de Notificación del Manejador de Trabajos
Utilice DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE para anular el registro del procedimiento de notificación del manejador de trabajos.
Para anular el registro del procedimiento de notificación del manejador de trabajos, debe estar conectado como usuario ADMIN o tener el privilegio MANAGE SCHEDULER.
Ejemplo para anular el registro del procedimiento de notificación del manejador de trabajos:
BEGIN
DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE ('job_notification_handler','');
END;
/