Acho que é isso. REPEAT_INTERVAL=> `FREQ=HOURLY; INTERVAL=4`
-----Original Message----- From: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] On Behalf Of Ana Cássia Japiassu Diniz Sent: quarta-feira, 26 de setembro de 2012 15:40 To: oracle_br@yahoogrupos.com.br Subject: 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 ___________________________________________________________________ The information transferred by this e-mail is solely for the intended recipient(s). Any disclosure, copying, distribution of this e-mail by and to others is not allowed. If you are not an intended recipient, please delete this e-mail and notify the sender. ___________________________________________________________________