Oracle Scheduler es un herramienta que permite aejecutar trabajos de manera periódica autmomáticamente.
Crear un trabajo:
Se utiliza el procedimiento create_job
Aquí tenemos un ejemplo de un job que llama a un procedimiento externo. Este job asume que existe un ejecutable, /users/oracle/scripts/delete_logs.sh, que se encargará de borrar los logs antiguos
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'DELETE_LOGS',
job_type => 'EXECUTABLE',
job_action => '/users/oracle/scripts/delete_logs.sh ',
repeat_interval => 'FREQ=DAILY;BYHOUR=14;BYMINUTE=11',
job_class => '"DEFAULT_JOB_CLASS"',
auto_drop => FALSE,
comments => 'Delete old files',
enabled => TRUE);
END;
/
Vamos a explicar algunos de los parámetros:
JOB_TYPE: Puede ser de los siguiente tipos: PROCEDURE, PLSQL_BLOCK oEXTERNA
REPEAT_INTERVAL : En este caso FREQ=DAILY;BYHOUR=14;BYMINUTE=11. En este caso todos los días las 2:11 p.m La sintaxis de este parámetro es bastante compleja, se pueden encontrar múltiples ejemplos en The Oracle Database PL/SQL Packages and Types Reference guide
JOB_CLASS Normalmente se utliza para proporcionar un método de los jobs automáticamente hereden atributos de esa clase. En este caso hemos utilizado la de por defecto.
AUTO_DROP Este parámetro le indica a oracle que no borre el job después de ejecutarlo
Como ver los detalles del job
Para ver cómo está configurado se utiliza la vista DBA_SCHEDULER_JOBS
SELECT
job_name
,last_start_date
,last_run_duration
,next_run_date
,repeat_interval
FROM dba_scheduler_jobs
WHERE job_name='<nombre_job>';
Cada vez que el job se jecuta se guarda un registro en DBA_SCHEDULER_JOB_LOG.
SELECT
job_name
,log_date
,operation
,status
FROM dba_scheduler_job_log
WHERE job_name='<nombre_job>';
Cómo modificar el periodo de retención de un log
Por defecto Oracle Scheduler guarda 30 días del historio se puede moficiar de la siguiente manera:
SQL> exec dbms_scheduler.set_scheduler_attribute('log_history',15);
Para limpiar todo el histórico del job:
SQL> exec dbms_scheduler.purge_log();
Modificar un job:
Se puede modificar los atributos de un job mediate el procedimiento SET_ATTRIBUTE. Un ejemplillo
BEGIN
dbms_scheduler.set_attribute(
name=>'<nombre_job>'
,attribute=>'repeat_interval'
,value=>'freq=weekly; byday=mon');
END;
/
Parar un job:
SQL> exec dbms_scheduler.stop_job(job_name=>'<nombre_job>');
Habilitarlo o deshabilitarlo:
exec dbms_scheduler.disable('DELETE_LOGS');
exec dbms_scheduler.enable('DELETE_LOGS');
Borrarlo:
exec dbms_scheduler.drop_job('DELETE_LOGS');