Créer, exécuter manuellement, désactiver et supprimer un job du scheduler
OracleSchedulerCommande
-- 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);Ce que fait la commande
Définit un job PL/SQL planifié avec DBMS_SCHEDULER ; fixe max_run_duration (lève un événement en cas de dépassement) et un niveau de journalisation détaillé, valide à l'avance l'expression de calendrier, et permet une exécution manuelle sans perturber la planification.
Quand l'utiliser
Pour exécuter dans la base plutôt que par cron des travaux récurrents tels que maintenance, ETL et nettoyage, en tenant compte de RAC/Data Guard.
Attention
Aucune licence supplémentaire. Le fuseau horaire de start_date compte : SYSTIMESTAMP utilise le TZ du serveur de base ; utilisez une région explicite (par ex. 'Europe/Istanbul') pour éviter les décalages aux changements d'heure. Si JOB_QUEUE_PROCESSES=0, aucun job ne s'exécute. DISABLE avec force=>TRUE n'arrête pas une exécution en cours, il empêche seulement les exécutions futures ; utilisez STOP_JOB pour l'interrompre. Créer un job dans un autre schéma exige CREATE ANY JOB.