Deshabilitar el DBMS Scheduler de Oracle
Consejo Breve
Algunas veces necesitamos evitar que se ejecuten todos los jobs calendarizados para realizar algún mantenimiento o instalación.
Comunmente se cambia el parámetro JOB_QUEUE_PROCESSES
a cero, pero tambien podemos deshabilitar el DBMS_SCHEDULER.
Deshabilitar el DBMS Scheduler
Puedes deshabilitar el Scheduler cambiando el atributo SCHEDULER_DISABLED
a TRUE:
SQL> exec dbms_scheduler.set_scheduler_attribute ( 'SCHEDULER_DISABLED', 'TRUE' );
PL/SQL procedure successfully completed.
SQL> select value from dba_scheduler_global_attribute where attribute_name = 'SCHEDULER_DISABLED';
VALUE
----------
TRUE
Con el fin de validar podemos en enviar un job para que se ejecute con la opción use_current_session
en FALSE, como se describe en la
Documentación del DBMS_SCHEDULER:
Cuando la opción use_current_session es FALSE, el comando RUN_JOB regresa inmediatamente y el job es tomando por el coordinador de jobs y se le pasa hacia un job esclavo para su ejecución. Las vistas y registros del Scheduler deben ser consultadas para ver la salida del job.
SQL> exec dbms_scheduler.run_job(job_name => 'PURGE_LOG', use_current_session => FALSE);
BEGIN dbms_scheduler.run_job(job_name => 'PURGE_LOG', use_current_session => FALSE); END;
*
ERROR at line 1:
ORA-27492: unable to run job "SYS"."PURGE_LOG": scheduler unavailable
ORA-06512: at "SYS.DBMS_ISCHED", line 242
ORA-06512: at "SYS.DBMS_SCHEDULER", line 566
ORA-06512: at line 1
Como podemos ver recibimos un error indicando scheduler no disponible.
Rehabilitar el DBMS Scheduler
Con el fin de habilitar de nuevo el Scheduler cambiamos el atributo SCHEDULER_DISABLED
a FALSE:
SQL> exec dbms_scheduler.set_scheduler_attribute ( 'SCHEDULER_DISABLED', 'FALSE');
PL/SQL procedure successfully completed.
SQL> select value from dba_scheduler_global_attribute where attribute_name = 'SCHEDULER_DISABLED';
no rows selected
y ahora podemos enviar jobs para que se ejecuten en el Scheduler:
SQL> exec dbms_scheduler.run_job(job_name => 'PURGE_LOG', use_current_session => FALSE);
PL/SQL procedure successfully completed.
SQL> select job_name, status, error#, actual_start_date from dba_scheduler_job_run_details where owner = 'SYS' and job_name = 'PURGE_LOG' order by 4 desc;
JOB_NAME STATUS ERROR# ACTUAL_START_DATE
------------------------------ ------------------------------ ---------- ---------------------------------------------------------------------------
PURGE_LOG SUCCEEDED 0 23-JUL-20 10.58.20.841421 AM PST8PDT
...