Crear, ejecutar manualmente, deshabilitar y eliminar un job del scheduler
OracleSchedulerComando
-- 1) Create disabled, set attributes, then enable:
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'CUSTOMER_APP.NIGHTLY_STATS',
job_type => 'PLSQL_BLOCK',
job_action => q'[BEGIN DBMS_STATS.GATHER_SCHEMA_STATS(ownname => 'CUSTOMER_APP', options => 'GATHER STALE'); END;]',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=DAILY; BYHOUR=2; BYMINUTE=30; BYSECOND=0',
enabled => FALSE,
auto_drop => FALSE,
comments => 'Nightly stale statistics gathering');
DBMS_SCHEDULER.SET_ATTRIBUTE('CUSTOMER_APP.NIGHTLY_STATS', 'max_run_duration', INTERVAL '2' HOUR);
DBMS_SCHEDULER.SET_ATTRIBUTE('CUSTOMER_APP.NIGHTLY_STATS', 'logging_level', DBMS_SCHEDULER.LOGGING_FULL);
DBMS_SCHEDULER.ENABLE('CUSTOMER_APP.NIGHTLY_STATS');
END;
/
-- 2) Validate the calendar expression (next run time):
SET SERVEROUTPUT ON
DECLARE
l_next TIMESTAMP WITH TIME ZONE;
BEGIN
DBMS_SCHEDULER.EVALUATE_CALENDAR_STRING(
calendar_string => 'FREQ=DAILY; BYHOUR=2; BYMINUTE=30; BYSECOND=0',
start_date => SYSTIMESTAMP,
return_date_after => SYSTIMESTAMP,
next_run_date => l_next);
DBMS_OUTPUT.PUT_LINE('Next run: ' || l_next);
END;
/
-- 3) Run now in the background (does not affect the schedule):
EXEC DBMS_SCHEDULER.RUN_JOB('CUSTOMER_APP.NIGHTLY_STATS', use_current_session => FALSE);
-- 4) Status:
SELECT owner, job_name, enabled, state, run_count, failure_count,
last_start_date, next_run_date
FROM dba_scheduler_jobs WHERE owner = 'CUSTOMER_APP';
-- 5) Stop (if running) / disable / drop:
-- EXEC DBMS_SCHEDULER.STOP_JOB('CUSTOMER_APP.NIGHTLY_STATS', force => FALSE);
EXEC DBMS_SCHEDULER.DISABLE('CUSTOMER_APP.NIGHTLY_STATS', force => TRUE);
EXEC DBMS_SCHEDULER.DROP_JOB('CUSTOMER_APP.NIGHTLY_STATS', force => TRUE);Qué hace
Define un job PL/SQL programado con DBMS_SCHEDULER; establece max_run_duration (genera un evento al superarse) y un nivel de logging detallado, valida de antemano la expresión de calendario y permite una ejecución manual sin alterar la programación.
Cuándo usarlo
Para ejecutar dentro de la base de datos, en lugar de cron, tareas recurrentes como mantenimiento, ETL y limpieza, teniendo en cuenta RAC/Data Guard.
Precaución
Sin licencia adicional. Importa la zona horaria de start_date: SYSTIMESTAMP usa la TZ del servidor de base de datos; use una región explícita (p. ej., 'Europe/Istanbul') para evitar desfases en los cambios de horario de verano. Si JOB_QUEUE_PROCESSES=0 no se ejecuta ningún job. DISABLE con force=>TRUE no detiene una ejecución en curso, solo impide las futuras; use STOP_JOB para interrumpirla. Crear un job en otro esquema requiere CREATE ANY JOB.