miércoles, 1 de noviembre de 2023

DBMS_SCHEDULER - Modificación, ejecución de jobs

DBMS_SCHEDULER reemplazó ya hace un tiempo al paquete DBMS_JOB como procedimiento a usar para la creación y modificación de jobs y eventos programados en nuestra base de datos Oracle.

A continuación escribo una pequeña recopilación de tareas que se pueden hacer con este paquete.

Para los ejemplos he usado un procedimiento "PROCTEST" que lo único que hace es insertar unas filas en una tabla de pruebas.


Creación de Job.

En este ejemplo creamos un job que ejecuta un PL/SQL. El job se ejecuta dentro de 10 minutos.

begin

dbms_scheduler.create_job (  

 job_name            => 'JOB_TEST',  

 job_type            => 'PLSQL_BLOCK',  

 job_action          => 'begin PROCTEST(2); end;',  

 number_of_arguments => 0,  

 start_date          => sysdate +10/24/59, -- sysdate + 10 minutos  

 job_class           => 'DEFAULT_JOB_CLASS',  -- Priority Group  

 enabled             => TRUE,  

 auto_drop           => TRUE,  

 comments            => 'JOB de prueba');

end;

/


Arrancar un Job manualmente.

begin  

dbms_scheduler.run_job('JOB_TEST',TRUE);  

end;

/


Reiniciar un Job.

begin  

dbms_scheduler.disable('JOB_TEST');  

dbms_scheduler.enable('JOB_TEST');  

end;

/


Borrar un Job.

begin

dbms_scheduler.drop_job('JOB_TEST');

end;

/


Creación de Intervalos de Tiempo.

Es posible crear horarios personalizados para luego programar los jobs. A continuación algunos ejemplos:


-- intervalo diario

begin

dbms_scheduler.create_schedule

(schedule_name => 'INTERVALO_DIARIO',

start_date=> trunc(sysdate)+18/24,

repeat_interval=> 'FREQ=DAILY; BYDAY=MON,TUE,WED,THU,FRI,SAT,SUN; BYHOUR=20;',

comments=>'Ejecucion: Todos los dias a las 20:00');

end;

/


-- intervalo cada hora

begin

dbms_scheduler.create_schedule(    

schedule_name  => 'INTERVALO_CADA_HORA',    

start_date    => trunc(sysdate)+18/24,    

repeat_interval => 'freq=HOURLY;interval=1',    

comments     => 'Ejecucion: cada hora');   

end;

/

-- intervalo cada 10 minutos

begin

dbms_scheduler.create_schedule(  

schedule_name  => 'INTERVALO_CADA_10_MINUTOS',  

start_date    => trunc(sysdate)+18/24,  

repeat_interval => 'freq=MINUTELY;interval=10',  

comments     => 'Ejecucion: cada 10 minutos');  

end;

/

-- todos los viernes a las 14:00

begin

dbms_scheduler.create_schedule  

(schedule_name => 'INTERVALO_VIERNES_1400',  

start_date=> trunc(sysdate)+18/24,  

repeat_interval=> 'FREQ=DAILY; BYDAY=FRI; BYHOUR=14;',  

comments=>'Ejecucion: Cada viernes a las 14:00');  

end;


Podemos consultar los intervalos de tiempo con la select:

SELECT owner, schedule_name, schedule_type, start_date, repeat_interval FROM dba_scheduler_schedules;


Borrado de Intervalos de Tiempo.

begin

dbms_scheduler.drop_schedule('INTERVALO_DIARIO');

end;

/


Creación de Programa y Jobs con asignación de Schedule.


Podemos crear un programa que haga referencia al PL/SQL que queremos ejecutar, para así después crear un Job que ejecute ese programa según el horario que hemos creado previamente.


Creación del programa.

begin   

dbms_scheduler.create_program  

(program_name=> 'PROG_PROCTEST',  

 program_type=> 'PLSQL_BLOCK',  

 program_action=> 'begin PROCTEST(2); end;',  

 enabled=>true,  

 comments=>'Programa de TEST'  

 );  

end; 

/


Creación del Job con el horario.

begin  

dbms_scheduler.create_job  

 (job_name => 'JOB_PROG_PROCTEST',  

  program_name=> 'PROG_PROCTEST',  

  schedule_name=>'INTERVALO_CADA_10_MINUTOS',  

  enabled=>true,  

  auto_drop=>false,  

  comments=>'Job que ejecuta el procedimiento PROCTEST cada 10 minutos');  

end;

/


Fuentes.

Artículo:  "DBMS_SCHEDULER - Modificación, ejecución de jobs" Publicado en https://zelioman.blogspot.com/ por  Patricia el 3 DE JULIO DE 2012. Consultado el 26/10/2023.

URL: https://zelioman.blogspot.com/2012/07/dbmsscheduler-modificacion-ejecucion-de.html

No hay comentarios:

Publicar un comentario