Pular para o conteúdo
  • Este tópico contém 9 respostas, 2 vozes e foi atualizado pela última vez 15 anos atrás por Hitotuzi.
Visualizando 10 posts - 1 até 10 (de 10 do total)
  • Autor
    Posts
  • #98209
    Hitotuzi
    Participante

      Bom dia!

      Alguém sabe se existe algum Agendador de Tarefas no Oracle 9i, e como utilizá-lo?

      1 Abraço,

      Hitotuzi

      #98211
      Ishii
      Participante

        Olá,

        Agendador, tipo o job do Oracle que pode ser programado?

        []s Ishii

        #98213
        Hitotuzi
        Participante

          [quote=”Ishii”:1ndmpjxn]Olá,

          Agendador, tipo o job do Oracle que pode ser programado?

          []s Ishii[/quote]

          Isso meu amigo preciso executar uma procedure a cada 5 minutos no meu banco, vc pode me ajudar?

          #98215
          Ishii
          Participante

            Olá,

            Use o DBMS_JOB:

            http://download.oracle.com/docs/cd/B10501_01/server.920/a96521/jobq.htm#9499

            Prestando atenção no item Job Execution Interval onde vai te mostrar como resolver os intervalos de execução…

            []s Ishii

            ps: prefiro o Scheduler mas isso é uma feature do Oracle 10g em diante…

            #98227
            Hitotuzi
            Participante

              [quote=”Ishii”:1gembp4f]Olá,

              Use o DBMS_JOB:

              http://download.oracle.com/docs/cd/B10501_01/server.920/a96521/jobq.htm#9499

              Prestando atenção no item Job Execution Interval onde vai te mostrar como resolver os intervalos de execução…

              []s Ishii

              ps: prefiro o Scheduler mas isso é uma feature do Oracle 10g em diante…[/quote]

              OBRIGADO MEU AMIGO, FUNCIONOU

              1 ABRAÇO

              #98234
              Hitotuzi
              Participante

                Está ocorrendo a seuinte situação, como configurei o dbms_job para executar uma procedure a cada 5 min, no entanto ele faz isso uma qtde de vezes e demos para alterando automáticamente o next_date para 1/1/4000

                Alguém sabe o porquê?

                #98237
                Ishii
                Participante

                  Olá,

                  O status fica Broken? Quanto tempo demora a execução da procedure? Se for superior aos cinco minutos, ela pode estar atrapalhando o próximo job por deixar um lock (se tiver) possível…

                  []s Ishii

                  #98238
                  Hitotuzi
                  Participante

                    Sim o status fika Broken = Y. Só existe esse Job, ele executa a cada 5 min porém após 16 vezes o campo next_date da tabela dba_jobs recebe o valor 1/1/4000 e o status fica Broken = Y não executa mais

                    #98240
                    Ishii
                    Participante

                      Olá,

                      Como o JOB é meio chato (prefiro o SCHEDULER) acho melhor você colocar um log na procedure que o JOB roda para ver o problema real, pode ser que um JOB cause um lock na próxima execução e aí fica um caos… Como o log do JOB não é muito preciso, será necessário analisar isso na própria rotina criada.

                      Tente rodar a cada 10 minutos e ver se não ocorre o Broken….analise novamente a procedure e veja onde pode ocorre algum lock…

                      []s Ishii

                      #98289
                      Hitotuzi
                      Participante

                        O problema não estava na procedure, criei uma simples só para testar da mesma for o Job para de executar na 16° vez.

                        Porém eu encontrei uma solução para o o problema da seguinte forma:

                        Existe um job 1 que executa uma procedure X a cada 5 min sendo que na 16° vez ela para e o status fica com broken = Y.

                        Solução:

                        Criei o job 2 que executa a procedure Y onde a mesma tem finalidade de verificar se o status do Job 1 está como broken = Y, se estiver ela executa a procedure do pacote DBMS_JOB:

                        DBMS_JOB.BROKEN(1, FALSE, sysdate+(3600 * ( 2/60 ) )/86400);
                        COMMIT;

                        que muda o status do Job 1 para broken = N e agenda uma nova execução.

                        Lembrando que o Job 2 só irá rodar 16x. para que o mesmo não pare também, no final da procedure X faço uma checagem verifico se o status do job 2 está broken = Y, caso esteja executa a procedure do pacote DBMS_JOB:

                        DBMS_JOB.BROKEN(2, FALSE, sysdate+(3600 * ( 2/60 ) )/86400);
                        COMMIT;

                        que muda o status do Job 2 para broken = N e agenda uma nova execução. Ficando assim em loop infinito, um job revalidando o outro e garantindo assim a execução da procedure.

                        Se alguém passar por uma situação parececida, a solução que encontrei foi essa, espero que ajude.

                        1 abraço,

                        Hitotuzi

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