Leandro Sacramento de Paula
tecnologia | big data | business intelligence | 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
--EXECUTAR O JOB
--PARAR EXECUÇÃO DO JOB
--DESABILITAR JOB
--HABILITAR JOB
--ALTERANDO UM SCHEDULE
--EXCLUINDO UM JOB
--LIMPAR LOG MAIORES QUE 10 DIAS
--HISTÓRICO DE EXECUÇÕES DOS JOBS
--MOSTRAR TODOS OS JOBS
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

Olá jovem Padawan, seja bem vindo! Este site foi criado com o intuito de compartilhar um pouco de conhecimento de Tecnologia da Informação, Big Data, Banco de Dados e Business Intelligence.
Tags das Publicações
"Se você vem da cidade ou do campo, seu sucesso será determinado pela sua própria confiança e coragem". (Michelle Obama)