Pular para o conteúdo
  • Este tópico contém 16 respostas, 5 vozes e foi atualizado pela última vez 15 anos, 3 meses atrás por thianolima.
Visualizando 15 posts - 1 até 15 (de 17 do total)
  • Autor
    Posts
  • #95965
    thianolima
    Participante

      Alguem 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.

      #95966
      VitorLeandro
      Participante

        Algum 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

        #95970
        jspaulonci
        Participante

          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

          #95971
          CleitonHanzen
          Participante

            Opá….

            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.

            #95972
            CleitonHanzen
            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…. 😛

              #96106
              thianolima
              Participante

                Entao 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…rs

                Como 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?

                #96117
                jspaulonci
                Participante

                  Olha , eu uso o dbms_job, não conheço o scheduler.

                  #96121
                  Ishii
                  Participante

                    Olá,

                    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

                    #96344
                    thianolima
                    Participante

                      Brigadao 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 fazer

                      #96347
                      Ishii
                      Participante

                        Olá,

                        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

                        #96352
                        thianolima
                        Participante

                          Ishi 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?

                          #96365
                          Ishii
                          Participante

                            Olá,

                            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

                            #96408
                            thianolima
                            Participante

                              Ei 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?

                              #96412
                              Ishii
                              Participante

                                Olá,

                                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

                                #96424
                                thianolima
                                Participante

                                  Amigo 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 ?

                                Visualizando 15 posts - 1 até 15 (de 17 do total)
                                • Você deve fazer login para responder a este tópico.