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


Responder a