- Este tópico contém 16 respostas, 5 vozes e foi atualizado pela última vez 15 anos, 3 meses atrás por
thianolima.
-
AutorPosts
-
8 de setembro de 2010 às 4:51 pm #95965
thianolima
ParticipanteAlguem poderia me dizer o que pode fazer com que um job para de se reagendar ?
Temos alguns jobs aqui na empresa e esse problema esta acontacendo com frequencia. As vezes acontece erro na spc mas ele reagenda mas as vezes nao acontece erro e ele nao reagenda a next_date e no campo failure esta com 0. Queria saber os motivos para eu poder melhorar isso no nosso banco.8 de setembro de 2010 às 7:15 pm #95966VitorLeandro
ParticipanteAlgum detalhe pode estar errada na programação do seu job. Talves a utilização do DBMS_SCHEDULER seja uma alternativa!
http://download.oracle.com/docs/cd/B193 … heduse.htm
8 de setembro de 2010 às 9:34 pm #95970jspaulonci
ParticipantePoste show parameter job_queue_processes
Veja esse valor,
select s.NEXT_DATE,s.LAST_DATE,s.BROKEN,s.FAILURES
from dba_jobs s
where job=Numero do job;Poste esse select também
8 de setembro de 2010 às 9:38 pm #95971CleitonHanzen
ParticipanteOpá….
Olha a única vez que vi algo do tipo ocorrer, foi quando a fila de jobs tava cheia. Com isso os jobs não executavam e as failures ficavam igual a zero.
Veja qual o valor do parâmetro JOB_QUEUE_PROCESSES e acompanhe através da view dba_jobs_running se existem muito jobs “demorados” executando ao mesmo tempo.
8 de setembro de 2010 às 9:39 pm #95972CleitonHanzen
Participante[quote=”jspaulonci”:2bc5tqm6]Poste show parameter job_queue_processes
Veja esse valor,
select s.NEXT_DATE,s.LAST_DATE,s.BROKEN,s.FAILURES
from dba_jobs s
where job=Numero do job;Poste esse select também[/quote]
rsrsrsrs…estava digitando e naum vi o teu post…. 😛
16 de setembro de 2010 às 5:01 pm #96106thianolima
ParticipanteEntao eu so consegui destravar matando um processo do job q estava preso dai rodei dbms_jobs.broken() para desativar e ativar.
Depois de fazer isso um zilhao de vezes e ate remover e recriar o job um milagre divino fez com que ele voltasse agendar…rsComo eu sei se a fila ta cheia do job como vcs falaram acima?
Outra pergunta alguem ja utilizou o dbms_scheduler()?
Ele da menos problemas que dbms_job?17 de setembro de 2010 às 3:39 pm #96117jspaulonci
ParticipanteOlha , eu uso o dbms_job, não conheço o scheduler.
17 de setembro de 2010 às 4:36 pm #96121Ishii
ParticipanteOlá,
O DBMS_SCHEDULER tem mais opções que o Job da Oracle. Por exemplo: é possível agendar em dias específicos como todo dia 1, 19 e 30 de cada mês. No Job seria necessário criar vários Jobs e isso está atrelado ao JOB_QUEUE_PROCESSES, mas no DBMS_SCHEDULER não há essa restrição. Outra vantagem do Scheduler é os logs que são muito mais ricos em informações, todas as execuções do Scheduler são visíveis nas views user_scheduler_job_log ou dba_scheduler_job_log (se tiver essa permissão para a view dba_…).
No Job, quando entra em “broken” ele fica suspenso até que seja seja ativado novamente, o Scheduler registra a falha na view de log mas mantém o agendamento ativo (mesmo que continue o erro) até que seja arrumado.Sugiro a leitura da documentação da Oracle sobre o DBMS_SCHEDULER que é muito rica e extensa em exemplos. http://bit.ly/a5Ty2s Link da Documentação.
Lembrando que é uma feature a partir do Oracle 10g. Segue abaixo apenas um exemplo da utilização chamando uma store procedure que está sendo rodada todo dia 1 de cada mês as 2:30hs a.m.
begin
DBMS_SCHEDULER.create_job ( job_name => 'nome do Job',
job_type => 'STORED_PROCEDURE',
job_action => 'pAjusteCustoEstoqProducao',
start_date => SYSTIMESTAMP,
repeat_interval => 'freq=monthly; interval=1; bymonthday=1; byhour= 2; byminute=30',
end_date => NULL,
enabled => TRUE,
comments => 'Job Carrega os Saldos de Estoque Producao');
end;
/
Explicando rapidamente o repeat_interval:
Freq: Frequencia monthly (mensal) poderia ser hourly (por hora) …
interval: intervalo de repetição 1, a cada um mês pois a frequencia é mensal se eu quisesse rodar bimestralmente o valor seria 2
bymonthday: o dia do mês que será executado, aqui posso informar vários dias
byhour: horário da execução, tb posso informar vários
byminute: minuto preciso da execução…idem aos outros…Há muito mais ainda… melhor ler a documentação e fazer uns testes…enjoy!!!
[]s Ishii
30 de setembro de 2010 às 12:17 am #96344thianolima
ParticipanteBrigadao pela resposta ishi…
Mudei minha rotina para dbms_scheduler, e deixei a rotina rodando a cada 20minutos desde ontem e por incrivel que pareça hoje a partir das 11:11:20 segundos, parou tambem de reagendar.
Rodei a sql SELECT * FROM USER_SCHEDULER_JOB_LOG e vi que o campo status ficou em 16 registros seguidos com FAILED e depois 59 registros com SUCESSED que foi o que rodou ate o hoario mencionado.
Dai entrei e rodei o dbms na mao usando o metodo dbms_scheduler.run_job, e ele rodou sem gerar erros mas nao reagendou.
O que pode ser???/
Nao sei mas oq fazer30 de setembro de 2010 às 7:13 am #96347Ishii
ParticipanteOlá,
Verifique o resultado da query
select additional_info from user_scheduler_job_run_details
where status = 'FAILED';
Verifique todas as views user_scheduler* elas tem muitas informações e como eu disse fica mais fácil analisar os possíveis erros…
[]s Ishii
30 de setembro de 2010 às 4:46 pm #96352thianolima
ParticipanteIshi retornou essa linha abaixo:
ORA-06550: line ORA-06550: line 1, column 501:
PLS-00103: Encountered the symbol “END” when expecting one of the following: := . ( @ % ; The symbol “;” was substituted for “END” to continue.
, column :Tinha criado o scheduler da seguinte maneira:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
JOB_NAME => 'JOB_AGENDA_EMAIL',
JOB_TYPE => 'PLSQL_BLOCK',
JOB_ACTION => 'BEGIN PRC_ENVIA_EMAIL_AGENDADO; END;'
START_DATE => SYSTIMESTAMP,
REPEAT_INTERVAL => 'freq=minutely; interval=20;',
END_DATE => NULL,
enabled => TRUE,
comments => 'JOB RESPONSAVEL POR ENVIAR OS EMAILS DA CAISA DE SAIDA.');
END;
e dai agora mudei somente o JOB_ACTION e o JOB_TYPE para igual ao seu exemplo:
BEGIN
DBMS_SCHEDULER.create_job (
JOB_NAME => 'JOB_AGENDA_EMAIL',
JOB_TYPE => 'STORED_PROCEDURE',
JOB_ACTION => 'PRC_ENVIA_EMAIL_AGENDADO',
START_DATE => SYSTIMESTAMP,
REPEAT_INTERVAL => 'freq=minutely; interval=20;',
END_DATE => NULL,
ENABLED => TRUE,
COMMENTS => 'JOB RESPONSAVEL POR ENVIAR OS EMAIL AGENDADOS');
END;
Esta executando vamos ver por qto tempo isso vai funcionar…rs
Voce tem mais alguma dica?1 de outubro de 2010 às 4:07 am #96365Ishii
ParticipanteOlá,
Acho que agora funciona, no caso do PL_SQL_BLOCK não precisa do “;” no final da instrução…
Analise sempre que possível os logs também…
[]s Ishiii
5 de outubro de 2010 às 9:22 pm #96408thianolima
ParticipanteEi ishi a zica voltou kra.
Rodou o final de semana e alguns dias da semana passada tudo numa boa e hoje não sei o porque parou de reagendar a partir do meio dia.
Voce tem mais alguma dica a respeito?7 de outubro de 2010 às 3:49 am #96412Ishii
ParticipanteOlá,
O que retorna em
select additional_info from user_scheduler_job_run_details
where status = 'FAILED';E como está o status do Schedule?
[]s Ishii
7 de outubro de 2010 às 10:23 pm #96424thianolima
ParticipanteAmigo esse scheduler eu reiniciei ele com um disable e um enable e ele voltou a funcionar meio ate agora porem tem outro q eu criei que esta com o seguinte erro abaixo:
ORA-04045: errors during recompilation/revalidation of ORA-04045: errors during recompilation/revalidation of FINAN.PRC_ATUALIZA
ORA-04052: error occurred when looking up remote object USU_EXT.BILHETESDEDEFEITO@SG_CASDIA
ORA-00604: error occurred at recursive SQL level 4
ORA-02020: too many database links in use
.E esse roda somente uma vez por dia na madrugada e ele nao pode nunca falhar pois todos os sistemas da empresa dependem dele.
Voce tem algum ideia do que esteja afetando ?
-
AutorPosts
- Você deve fazer login para responder a este tópico.