Algumas tarefas ou execuções de processos precisam ser feitas periodicamente, ou simplesmente agendadas para um determinado horário.
O Oracle possui algumas maneiras de automatizar estas atividades, uma delas é a submissão de atividades como JOBS.
JOBs são objetos associados ao schema que permitem agendamento de atividades, para trabalharmos com os jobs precisamos de permissão de execução na package DBMS_JOB.
( é válido lembrar que deve existir uma queue para os jobs previamente configurada, o que é normal numa instalação padrão ).
Neste post estarei mostrando, de maneira resumida, como criar JOBS e corrigí-los caso fiquem BROKEN.
Submetendo um JOB
Para submetermos um JOB precisamos de alguns itens:
– O que executar;
– Se periódico, qual o intervalo;
No meu caso tenho uma procedure PROC_LIMPADADOS e o intervalo de execução dela é a cada 12h.
Para submetermos um JOB usamos a seguinte sintaxe:
SQLPLUS> DECLARE jobno NUMBER; BEGIN DBMS_JOB.submit(jobno,'PROC_LIMPADADOS;',sysdate+1/12); end; /
Explicando os parâmetros
DBMS_JOB.submit
1) o primeiro parametro é um parametro OUT e não pode receber nenhum valor. Este campo retornará o código da sua JOB, no meu caso não exibe na tela. ( voce poderia usar o DBMS_OUTPUT.PUT_LINE ou algo assim para fazre isso 🙂 ).
2) o segundo parametro é uma string com o nome da sua procedure. Se for uma package use a seguinte forma: ‘PACKAGE_SUA.PROCEDURE_DA_PACKAGE’.
3) intervalo de execução.
Corrigindo JOBs Broken
Algumas vezes sua job pode falhar e o Oracle pode setá-la como broken. Broken é um estado que a JOB fica agendada para uma data inválida e é necessário revalidá-la para que volte a funcionar.
Para corrigirmos uma JOB BROKEN usamos o comando:
SQLPLUS> exec dbms_job.broken(14242, FALSE, TO_DATE('26/01/2011 05:00','dd/MM/yyyy HH24:mi') );
Explicando os parâmetros
DBMS_JOB.submit
1) o primeiro parametro é o código da sua JOB, no meu caso 14242.
2) o segundo parametro é um boleano que informa se sua JOB deve continuar BROKEN ou se deve ser reativada para execução.
3) próxima data de execução. ( ele vai manter o mesmo intervalo de anteriormente )
Como ver as JOBs
Ahá! Pois bem, para visualizarmos as JOBs cadastradas no banco devemos usar as VIEWs USER_JOBS, ALL_JOBS ou DBA_JOBS
SQLPLUS> select * from all_jobs;
Na view você poderá ver a última execução, a próxima execução, se a JOB está broken e demais dados.
Como ver as JOBs em execução
Na view DBA_JOBS_RUNNING você terá uma listagem das JOBs em execução no momento.
SQLPLUS> select * from dba_jobs_running;
Onde encontrar erros da minha JOB?
Você poderá encontrar erros de sua job nos alert logs e nos traces do oracle. Na pasta diag ou na pasta bdump.
Espero que este post possa ajudar na criação e manutenção das JOBS.
Abraço!