Sete serveroutput on e execute a procedure manualmente e veja se ela retorna algum erro
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: vitorj...@gmail.com http://certificacaobd.com.br/ skype: vjunior1981 On 26/09/2012, at 15:39, Ana Cássia Japiassu Diniz <anajapia...@gmail.com> wrote: > 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] ------------------------------------ -------------------------------------------------------------------------------------------------------------------------- >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 <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ <*> Para sair deste grupo, envie um e-mail para: oracle_br-unsubscr...@yahoogrupos.com.br <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html