tecnologia | consultoria | banco de dados

Oracle - Job Scheduler

Nesta publicação será mostrado uma forma para agendamento de execuções automáticas no banco de dados Oracle.

No Oracle, a partir da versão 10G, a package DBMS_JOBS foi depreciada e disponibilizada a package DBMS_SCHEDULER.

Irei mostrar apenas a nova forma de execução, a qual permite consultar históricos de execução e, caso necessário, interromper a execução sem a necessidade de possuir privilégios de DBA (Database Administrator).


Tipos de frequência:
YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY

Tipos de intervalo:
O valor padrão é 1 e o valor máximo é 999

--CRIANDO UM JOB

BEGIN
DBMS_SCHEDULER.CREATE_JOB
(
JOB_NAME => 'JB_MEU_JOB'
,JOB_TYPE => 'STORED_PROCEDURE'
,JOB_ACTION => 'SCHEMA.PRC_MINHA_PROCEDURE'
,START_DATE => ?FROM_TZ(SYSTIMESTAMP,'-03:00')
,REPEAT_INTERVAL => 'FREQ=SECONDLY;INTERVAL=30'
,AUTO_DROP => FALSE
,COMMENTS => 'JOB QUE EXECUTA A PROCEDURE SCHEMA.PRC_MINHA_PROCEDURE A CADA 30 SEGUNDOS'
,ENABLED => TRUE
);
END;
BEGIN
DBMS_SCHEDULER.CREATE_JOB
(
JOB_NAME => 'JB_MEU_JOB'
,JOB_TYPE => 'PLSQL_BLOCK'
,JOB_ACTION => '
/*
PROPÓSITO: JOB DE EXEMPLO COM BLOCO PL/SQL
REVISÕES:
Ver Data Autor Descrição
--------- ---------- ------------------ ---------------------------------
1.0 11/05/2016 Leandro Sacramento 1) Criação

*/
DECLARE
V_COUNT NUMBER := NULL;
BEGIN
SELECT COUNT(1)
INTO V_COUNT
FROM VW_MINHA_VIEW
WHERE DS_COLUNA IS NULL;
IF V_COUNT > 0 THEN
PRC_MINHA_PROCEDURE();
END IF;
'
,START_DATE => FROM_TZ(SYSTIMESTAMP,'-03:00')
,REPEAT_INTERVAL => 'FREQ=DAILY; BYDAY=MON,TUE,WED,THU,FRI; BYHOUR=8,9,10,11,12,13,14,15; BYMINUTE=0; BYSECOND=0'
,AUTO_DROP => FALSE
,COMMENTS => 'JOB QUE EXECUTA A PROCEDURE SCHEMA.PRC_MINHA_PROCEDURE A CADA 30 SEGUNDOS'
,ENABLED => TRUE
);
END;

--EXECUTAR O JOB

BEGIN
DBMS_SCHEDULER.RUN_JOB('SCHEMA.JB_MEU_JOB',TRUE);
END;

--PARAR EXECUÇÃO DO JOB

BEGIN
DBMS_SCHEDULER.STOP_JOB
(
job_name => 'SCHEMA.JB_MEU_JOB',
force => TRUE
);
END;

--DESABILITAR JOB

BEGIN
DBMS_SCHEDULER.DISABLE(NAME => 'SCHEMA.JB_MEU_JOB', force => TRUE);
END;

--HABILITAR JOB

BEGIN
DBMS_SCHEDULER.ENABLE(NAME => 'SCHEMA.JB_MEU_JOB');
END;

--ALTERANDO UM SCHEDULE

BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE
(
NAME => 'SCHEMA.JB_MEU_JOB',
ATTRIBUTE => 'REPEAT_INTERVAL',
VALUE => 'FREQ=DAILY; BYHOUR=15; BYMINUTE=30'
);
END;

--EXCLUINDO UM JOB

BEGIN
DBMS_SCHEDULER.DROP_JOB(JOB_NAME => 'SCHEMA.JB_MEU_JOB', FORCE => TRUE);
END;

--LIMPAR LOG MAIORES QUE 10 DIAS

BEGIN
DBMS_SCHEDLER.PURGE_LOG(log_history => 10, job_name => 'SCHEMA.JB_MEU_JOB');
END;

--HISTÓRICO DE EXECUÇÕES DOS JOBS

SELECT * FROM USER_SCHEDULER_JOB_RUN_DETAILS;

--MOSTRAR TODOS OS JOBS

SELECT JOB_NAME, STATE, LAST_START_DATE
FROM USER_SCHEDULER_JOBS;
Data publicação: 21:13 11/05/2016
Perfil
Olá jovem Padawan, seja bem vindo! Este site foi criado com o intuito de compartilhar um pouco de conhecimento de Tecnologia da Informação e Business Intelligence.

Linkedin  Youtube

"Meus filhos terão computadores, sim, mas antes terão livros. Sem livros, sem leitura, os nossos filhos serão incapazes de escrever - inclusive a sua própria história." (Bill Gates)


Leandro Sacramento, Todos os direitos reservados - 2012 - 2020