Este site ira lhe ajudar com algumas opções no uso do DBMS_SCHEDULER http://docs.oracle.com/cd/B28359_01/server.111/b28310/schedadmin006.htm
--LISTA OS JOBS SELECT j.owner, j.job_name, j.job_action, j.last_start_date, j.last_run_duration, j.next_run_date, j.state FROM dba_scheduler_jobs j WHERE UPPER(j.owner) = 'xxx'; >________________________________ > De: Ana Cássia Japiassu Diniz <anajapia...@gmail.com> >Para: oracle_br@yahoogrupos.com.br >Enviadas: Quarta-feira, 26 de Setembro de 2012 15:39 >Assunto: Re: [oracle_br] Re: Execução de job's no oracle 10g (10.2.0.5) > >Grata a todos pelas informações/ajuda. > >Samuel, > >seguindo o seu exemplo/sugestão exclui o job existente para executar a >procedure e criei com o script abaixo: >BEGIN > DBMS_SCHEDULER.create_job (job_name => 'ACP.JOB_EXECUTA_PROC', > job_type => 'STORED_PROCEDURE', > job_action => 'ACP.SPD_CARGA_REL_EST_PROC', > repeat_interval => 'FREQ=DAILY; >BYHOUR=3,7,11,15,19,23; BYMINUTE=0; BYSECOND=0', > end_date => NULL, > enabled => TRUE, > comments => 'Teste'); >End; >/ > >O que retornou "PL/SQL procedure successfully completed". >Dúvida: Não estou conseguindo visualizando o JOB pelo o plsql developer por >exemplo, deveria aparecer na aba job não era? Outra coisa: a minha >necessidade é que este job seja executado diariamente de 4 em 4 horas. Como >defino este intervalo no repeat interval? > >Em paralelo estou pesquisando, mas preciso que isto funcione ainda hoje e >ainda não havia utilizado o DBMS_SCHEDULER. > >Mais uma vez muito obrigada a todos. > >Ana > >Em 26 de setembro de 2012 14:43, J. Laurindo Chiappa <jlchia...@yahoo.com.br >> escreveu: > >> ** >> >> >> Vitor, apenas um adendo : absolutamente ***** NÃO ******* é >> exigido/necessário/preciso vc ter EXCEPTIONs no seu bloco PL/SQL (seja >> anônimo, seja named dentro dum stored PL/SQL, absolutamente não importa) >> seo que vc quer é obter um status de falha causada por erros 'normais' >> decorrentes da execução de SQLs ou PL/SQLs : o comportamento NORMAL dum >> bloco PL/SQL é ser encerrado e reporta o código do erro pra quem o >> chamou... Apenas se usa EXCEPTION se vc OU quer ter algum tratamento de >> erros customizado (digamos, quer gravar numa tabela sua alguns detalhes a >> mais que não são armazenados), OU se vc quer 'mascarar' o erro.... >> Veja o exemplo abaixo mostrando que SIM, uma falha aborta o bloco e SIM, >> isso fica registrado Inclusive para jobs DBMS_JOB : >> >> ==> crio uma tabela e uma procedure que sintaticamente está OK, mas que >> vai falhar com TOO MANY ROWS, pois fará SELECT de múltiplos valores numa >> variável escalar : >> >> SQL> create table TAB_OBJ as (select * from DBA_OBJECTS); >> >> Tabela criada. >> >> SQL> create or replace procedure PROC_TESTE_JOB is >> 2 v_number number; >> 3 BEGIN >> 4 select object_id into v_number from TAB_OBJ; >> 5 END; >> 6 / >> >> Procedimento criado. >> >> ==> vou executar num JOB : >> >> SQL> set serveroutput on >> SQL> DECLARE >> 2 v_jobno number; >> 3 BEGIN >> 4 dbms_job.submit( >> 5 v_jobno, >> 6 'BEGIN PROC_TESTE_JOB; END;', >> 7 sysdate + 5 / (24*60), >> 8 'trunc(sysdate,''mi'')+1/288', >> 9 TRUE); >> 10 commit; >> 11 dbms_output.put_line('Job id=' || v_jobno); >> 12 END; >> 13 / >> Job id=27 >> >> Procedimento PL/SQL concluÝdo com sucesso. >> >> ==> espero os 5 minutos especificados, veja que a falha ocorreu e FOI >> registrada na coluna, sem absolutamente NENHUMA necessidade de criar uma >> EXCEPTION : >> >> SQL> select job, last_date, this_date, next_date, broken, interval, >> failures, what from dba_jobs; >> >> JOB LAST_DATE THIS_DATE NEXT_DATE B INTERVAL FAILURES WHAT >> ---------- ------------------- ------------------- ------------------- - >> --------------------------- ------- ----------------------------------- >> 5 26/09/2012 12:06:00 30/09/2012 01:00:00 N wk_job.next_time('DY0701') 0 >> wksys.wk_job.invoke(2,5); >> 7 26/09/2012 12:35:05 26/09/2012 12:36:05 N sysdate + 1 / (24 * 60) 0 >> EMD_MAINTENANCE.EXECUTE_EM_DBMS_JOB_PROCS(); >> 4 26/09/2012 12:06:00 26/09/2012 13:00:00 N wk_job.next_time('HH0001') 0 >> wksys.wk_job.invoke(2,4); >> 27 26/09/2012 12:37:20 N trunc(sysdate,'mi')+1/288 1 BEGIN PROC_TESTE_JOB; >> END; >> >> ==> espero mais 5 ... >> >> SQL> / >> >> SQL> select job, last_date, this_date, next_date, broken, interval, >> failures, what from dba_jobs; >> >> JOB LAST_DATE THIS_DATE NEXT_DATE B INTERVAL FAILURES WHAT >> ---------- ------------------- ------------------- ------------------- - >> --------------------------- ------- ----------------------------------- >> 5 26/09/2012 12:06:00 30/09/2012 01:00:00 N wk_job.next_time('DY0701') 0 >> wksys.wk_job.invoke(2,5); >> 7 26/09/2012 12:40:05 26/09/2012 12:41:05 N sysdate + 1 / (24 * 60) 0 >> EMD_MAINTENANCE.EXECUTE_EM_DBMS_JOB_PROCS(); >> 4 26/09/2012 12:06:00 26/09/2012 13:00:00 N wk_job.next_time('HH0001') 0 >> wksys.wk_job.invoke(2,4); >> 27 26/09/2012 12:41:20 N trunc(sysdate,'mi')+1/288 2 BEGIN PROC_TESTE_JOB; >> END; >> >> SQL> >> >> ===> okdoc ?? Só acrescento, tal como Documentado, após um erro o JOb vai >> ser executado de novo no próximo schedule, e de novo, e de novo, até >> completar 16 vezes, quando aí sim ele é declarado QUEBRADo e a coluna >> BROKEN é marcada com Y ... SERÀ que não foi isso que aconteceu pra vc, >> quando vcdiz que o seu job não foi marcado como BROKEN apos falhar ??? >> >> Como eu disse também, situações de erro lógico, que NÂO geram código de >> erro físico (exemplo, UPDATE ou DELETE que não encontraram nenhum >> registro), logicamente NÃO são flagados, veja : >> >> >> SQL> create or replace procedure PROC_TESTE_JOB is >> 2 v_number number; >> 3 BEGIN >> 4 update TAB_OBJ set object_id = 999999999 where 1=2; >> 5 END; >> 6 / >> >> Procedimento criado. >> >> SQL> select job, last_date, this_date, next_date, broken, interval, >> failures, what from dba_jobs; >> >> SQL> select job, last_date, this_date, next_date, broken, interval, >> failures, what from dba_jobs; >> >> JOB LAST_DATE THIS_DATE NEXT_DATE B INTERVAL FAILURES WHAT >> ---------- ------------------- ------------------- ------------------- - >> --------------------------- ------- ----------------------------------- >> 5 26/09/2012 12:06:00 30/09/2012 01:00:00 N wk_job.next_time('DY0701') 0 >> wksys.wk_job.invoke(2,5); >> 7 26/09/2012 12:40:05 26/09/2012 12:41:05 N sysdate + 1 / (24 * 60) 0 >> EMD_MAINTENANCE.EXECUTE_EM_DBMS_JOB_PROCS(); >> 4 26/09/2012 12:06:00 26/09/2012 13:00:00 N wk_job.next_time('HH0001') 0 >> wksys.wk_job.invoke(2,4); >> 27 26/09/2012 13:26:03 26/09/2012 13:31:00 N trunc(sysdate,'mi')+1/288 0 >> BEGIN PROC_TESTE_JOB; END; >> >> => espero mais algum tempo .... >> >> SQL> / >> >> SQL> select job, last_date, this_date, next_date, broken, interval, >> failures, what from dba_jobs; >> >> JOB LAST_DATE THIS_DATE NEXT_DATE B INTERVAL FAILURES WHAT >> ---------- ------------------- ------------------- ------------------- - >> --------------------------- ------- ----------------------------------- >> 5 26/09/2012 12:06:00 30/09/2012 01:00:00 N wk_job.next_time('DY0701') 0 >> wksys.wk_job.invoke(2,5); >> 7 26/09/2012 12:40:05 26/09/2012 12:41:05 N sysdate + 1 / (24 * 60) 0 >> EMD_MAINTENANCE.EXECUTE_EM_DBMS_JOB_PROCS(); >> 4 26/09/2012 12:06:00 26/09/2012 13:00:00 N wk_job.next_time('HH0001') 0 >> wksys.wk_job.invoke(2,4); >> 27 26/09/2012 13:51:00 26/09/2012 13:56:00 N trunc(sysdate,'mi')+1/288 0 >> BEGIN PROC_TESTE_JOB; END; >> >> []s >> >> Chiappa >> >> --- Em oracle_br@yahoogrupos.com.br, "Vitor Jr." <vitorjr81@...> escreveu >> >> > >> > Sim, passo por isso direto… :) >> > Cenário: >> > job criado com sucesso, procedure está válida, job dispara mas não >> finaliza o processo mas não acusa falha na coluna failures ou broken da >> dba_jobs. >> > Conclusão: >> > Falha no procedimento e não há tratamento de exception, em 100% dos >> casos que peguei até hoje… Não necessariamente uma atualização de banco >> causa isso, geralmente uma atualização na procedure pode causar isso… >> > Era necessário debugar a execução da procedure e verificar em que ponto >> a mesma está falhando. >> > >> > >> > Att,/Regards, >> > >> > >> > Vitor Jr. >> > Infraestrutura / Infrastructure Team >> > Oracle 11g DBA Certified Professional - OCP >> > Oracle Certified Expert, Oracle Real Application Clusters 11g and Grid >> Infrastructure Administrator - OCE >> > Oracle Database 11g Performance Tuning Certified Expert - OCE >> > Oracle Exadata 11g Certified Implementation Specialist >> > Oracle Certified Associate, MySQL 5 >> > mail, gtalk e msn: vitorjr81@... >> > http://certificacaobd.com.br/ >> > skype: vjunior1981 >> >> > >> > >> > >> > >> > On 26/09/2012, at 11:27, Ana Cássia Japiassu Diniz <anajapiassu@...> >> wrote: >> > >> > > Olá pessoal, >> > > >> > > Tenho um job na base de dados que não está executando. Executo o >> script de >> > > criação o mesmo é criado e agendado sem erros, porém não executa. >> > > Segue o script que usei ao tentar recriar o job. >> > > >> > > Funcionava sem problemas no oracle 10.2.0.1, desde de que migrei a >> base de >> > > dados para o 10.2.0.5 parou de funcionar. Não sei se tem haver. Estou >> > > pesquisando também algo nesta linha. >> > > >> > > A procedure esyá compilada e executa sem erros. >> > > >> > > Alguém já passou por essa situação do job simplesmente parar de >> executar? >> > > Não gera nenhum erro. >> > > >> > > begin >> > > >> > > for rec in (select job from dba_jobs where what = >> > > 'ACP.SPD_CARGA_REL_EST_PROC;') LOOP >> > > sys.dbms_ijob.remove (rec.job); >> > > end loop; >> > > commit; >> > > end; >> > > / >> > > >> > > alter session set NLS_DATE_FORMAT='dd/mm/yyyy'; >> > > >> > > variable job NUMBER; >> > > >> > > declare >> > > v_hora_atual integer; >> > > v_prox_hora integer; >> > > begin >> > > >> > > select to_char(sysdate, 'HH24') into v_hora_atual from dual; >> > > >> > > if v_hora_atual > 3 and v_hora_atual < 7 then >> > > >> > > v_prox_hora := 7; >> > > >> > > elsif v_hora_atual >= 7 and v_hora_atual < 11 then >> > > >> > > v_prox_hora := 11; >> > > >> > > elsif v_hora_atual >= 11 and v_hora_atual < 15 then >> > > >> > > v_prox_hora := 15; >> > > >> > > elsif v_hora_atual >= 15 and v_hora_atual < 19 then >> > > >> > > v_prox_hora := 19; >> > > >> > > elsif v_hora_atual >= 19 and v_hora_atual < 23 then >> > > >> > > v_prox_hora := 23; >> > > >> > > else >> > > >> > > v_prox_hora := 3; >> > > >> > > end if; >> > > >> > > select nvl(max(job)+1,40) into :job from dba_jobs; >> > > >> > > sys.dbms_ijob.submit( job => :job, >> > > LUSER => 'ACP', >> > > PUSER => 'ACP', >> > > CUSER => 'ACP', >> > > what => 'ACP.SPD_CARGA_REL_EST_PROC;', >> > > next_date => trunc(sysdate) + v_prox_hora/24, >> > > interval => 'trunc(sysdate+1/6,''HH'')', >> > > BROKEN => false, >> > > NLSENV => 'NLS_LANGUAGE="AMERICAN" >> > > NLS_TERRITORY="AMERICA" NLS_CURRENCY="$" NLS_ISO_CURRENCY="AMERICA" >> > > NLS_NUMERIC_CHARACTERS=".," NLS_DATE_FORMAT="=dd/mm/yyyy" >> > > NLS_DATE_LANGUAGE="AMERICAN" NLS_SORT="BINARY"', >> > > ENV => hextoraw('0102000200000000')); >> > > commit; >> > > >> > > end; >> > > / >> > > >> > > Desde já agradeço a todos. >> > > >> > > Ana >> > > >> > > [As partes desta mensagem que não continham texto foram removidas] >> > > >> > > >> > >> > >> > >> > [As partes desta mensagem que não continham texto foram removidas] >> > >> >> >> > > > >-- >"A Cristo, por Maria, >Juntos até o Céu." > >Jesus Misericordioso, Eu confio em Vós! > >"Viver e levar para o mundo a misericórdia, é a nossa missão" >Comunidade Católica Missionária Filhos da Misericórdia > > >[As partes desta mensagem que não continham texto foram removidas] > > > >------------------------------------ > >-------------------------------------------------------------------------------------------------------------------------- >>Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira >>responsabilidade de seus remetentes. >Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ >-------------------------------------------------------------------------------------------------------------------------- >>Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » >>Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: >>http://www.oraclebr.com.br/ >------------------------------------------------------------------------------------------------------------------------ > Links do Yahoo! Grupos > > > > > [As partes desta mensagem que não continham texto foram removidas]