Pular para o conteúdo
Visualizando 15 posts - 1 até 15 (de 19 do total)
  • Autor
    Posts
  • #84832
    airoosp
    Participante

      Boa tarde,

      Um job que executa uma procedure parou de funcionar, como não consegui identificar o problema, utilizei o comando dbms_job.remove para remover o job e o comando abaixo para criá-lo novamente.

      variable job number;
      begin
      sys.dbms_job.submit(job => :job,
      what => ‘ATUALIZACAO;’,
      next_date => to_date(’20-01-2009 14:15:30′, ‘dd-mm-yyyy hh24:mi:ss’),
      interval => ‘SYSDATE + 1’);
      commit;
      end;
      /

      O job foi criado e a execução começou no horário programado, só que 3 horas após o início verifiquei que o mesmo continua em execução através da view DBA_JOBS_RUNNING, o processo executado na procedure é rápido, não entendi porque continua aparecendo no retorno da view, alguém tem idéia do que pode estar acontecendo? Outra coisa a view DBA_JOBS mostra diversos campos (job, log_user, priv_user, last_date, last_sec, this_date, this_sec, next_date, next_sec) os campos last_date, last_sec, next_date e next_sec não deveriam estar atualizados?

      last_date 20/01/2009 14:15:30
      last_sec 14:15:30
      next_date 21/01/2009 14:15:30
      next_sec 14:15:30

      Se alguém tiver alguma dica agradeço.

      Obrigado.

      Airton

      #84833
      Avatar photoLeonardo Litz
      Participante

        Olá Airton, possívelmente voce pode estar lockado.
        Estas colunas são atualizadas quando o job termina sua execução.

        #84834
        airoosp
        Participante

          Entendi, você sabe informar como posso identificar o job lockado?

          #84839
          Avatar photoLeonardo Litz
          Participante

            Segue abaixo

            select sid,serial# into V_SID,v_serial
            from v$session
            where sid =(select session_id
            from dba_locks
            where Blocking_others ‘Not Blocking’);

            lembrando que para visualizar views dba vc deve de ter permissão de dba

            #84843
            David Siqueira
            Participante

              Você poderia identificar também pela V$ACCESS quem esta usando esse objeto ATUALIZAÇÂO que é executado pelo JOB , e com o SID da sesão em mãos você poderia consultar as principais tabelas de LOcks e de WAits pra saber quem esta prendendo sua sessão ou até mesmo se sua sessão esta esperando por algum recurso de máquina ou até mesmo por algum delay da propria programação do objeto.

              Abcs.

              #84845
              airoosp
              Participante

                Através da V$access consegui visualizar o owner e a procedure que foi chamada várias vezes, através do select abaixo consegui obter mais informações, pelo que entendi há uma sessão que esta em carregada desde o dia 17, será que é este o problema, bloqueou as tentativas de execução do dia 20?

                select s.sid, s.status, s.server, s.LOCKWAIT, s.logon_time, w.WAIT_TIME, w.SECONDS_IN_WAIT, w.STATE
                from v$session s, v$session_wait w
                where s.sid = w.sid
                and w.sid in (’59’,’93’,’116′,’137′)
                order by s.LOGON_TIME

                sid 93
                status ACTIVE
                server DEDICATED
                logon_time 17/01/2009 14:17:42
                wait_time 0
                seconds_in_wait 273030
                state WAITING

                sid 59
                status ACTIVE
                server DEDICATED
                logon_time 20/01/2009 05:00:58
                wait_time 0
                seconds_in_wait 47268
                state WAITING

                sid 116
                status ACTIVE
                server DEDICATED
                logon_time 20/01/2009 11:44:59
                wait_time 0
                seconds_in_wait 23027
                state WAITING

                sid 137
                status ACTIVE
                server DEDICATED
                logon_time 20/01/2009 14:15:29
                wait_time 0
                seconds_in_wait 13997
                state WAITING

                Obrigado.

                #84849
                Rodrigo Almeida
                Participante

                  Airton,

                  Só me confirma duas coisas.

                  1) Durante a execução do job e finalizar o processo, verifica se a sua sessão está com lock na tabela job$ do SYS?

                  2) A sua versão do 9i, é a 9.2.0.5 ou 9.2.0.6?

                  Abraços,
                  Rodrigo Almeida

                  #84855
                  David Siqueira
                  Participante

                    Utilize esse script para visualizar quais sessões estão segurando as outras sessões :

                    — Autor : David Ricardo
                    — DBA Oracle Pleno – 09/03/2007
                    — Descrição : Analisa as sessões em Wait e seus processos de Espera.

                    col busername for a10 heading ‘Holding|User’
                    col wusername for a10 heading ‘Waiting|User’
                    col mode_held for a10 heading ‘Mode|Held’
                    col bsession_id heading ‘Holding|SID’
                    col wsession_id heading ‘Waiting|SID’
                    col mode_requested for 999999 heading ‘Mode|Requested’
                    col lock_id1 for 999999 heading ‘Lock|ID1’
                    col lock_id2 for a15 heading ‘Lock|ID2’
                    col type heading ‘Lock|Type’

                    set lin 132 pages 59 feedback off echo off

                    ttitle ‘Relatório de Processos em Espera de Locks’

                    select a.inst_id,
                    c.holding_session bsession_id,
                    c.waiting_session wsession_id,
                    b.username busername,
                    a.username wusername,
                    c.lock_type type,
                    c.mode_held,
                    c.mode_requested,
                    c.lock_id1,
                    c.lock_id2
                    from gv$session b,
                    dba_waiters c,
                    gv$session a
                    where c.holding_session=b.sid
                    and c.waiting_session=a.sid
                    and a.inst_id=b.inst_id;

                    clear columns
                    set lin 100 pages 20 feedback on
                    ttitle off

                    E depois identifique o que o Rodrigo lhe orientou, porque pode ser que seja um caso de um BUG que há na release que ele mencionou. E não esqueça de verificar nas sessões os objetos que estão lockados , aqui vai um script pra verificar as sessões em lock e seus objetos e qual sql esta rodando no momento referente ao lock :

                    set echo off
                    set feedback on
                    set linesize 1000
                    col sid format 99999
                    col serial format 99999
                    col username format a20
                    col osuser format a10
                    col owner format a10
                    col object_name format a30
                    col machine format a15
                    col program format a35
                    col lockmode format a10

                    prompt —-Sessions and objects involved in the locks

                    Select distinct s.sid,s.serial#,
                    s.username,
                    s.status,
                    s.osuser,
                    p.spid “OS Pid”,
                    o.object_name,
                    decode(l.locked_mode,
                    0, ‘None’,
                    1, ‘Null’,
                    2, ‘Row-S’,
                    3, ‘Row-X’,
                    4, ‘Share’,
                    5, ‘S/Row-X’,
                    6, ‘Exclusive’,
                    to_char(l.locked_mode)) “LockMode”,
                    s.lockwait,
                    s.program,
                    s.taddr
                    from dba_objects o ,
                    v$locked_object l,
                    v$session s,
                    v$process p,
                    v$sqltext t
                    where l.object_id=o.object_id
                    and l.session_id = s.sid
                    and s.paddr = p.addr
                    and t.address = s.sql_address
                    and t.hash_value = s.sql_hash_value
                    order by sid,serial#;

                    prompt —-SQL statements sessions currently executing

                    Select distinct s.sid,
                    s.serial#,
                    p.spid “O.S|Id”,
                    t.piece,
                    t.sql_text
                    from dba_objects o ,
                    v$locked_object l,
                    v$session s,
                    v$process p,
                    v$sqltext t
                    where l.object_id=o.object_id
                    and l.session_id = s.sid
                    and s.paddr = p.addr
                    and t.address = s.sql_address
                    and t.hash_value = s.sql_hash_value
                    order by sid,serial#;

                    Abcs.
                    David Ricardo.

                    #84856
                    airoosp
                    Participante

                      Pessoal, obrigado pelas orientação a versão do banco é 9.2.0.7 e ao fazer um select na tabela sys.job$ aparece a mensagem de erro:

                      ORA-00932 inconsistent datatype: expected NUMBER got LABEL

                      David, executei os scripts que você passou e retornaram nenhuma linha.

                      O mais estranho que é o job que é executado todos os dias envia mensagem via e-mail para uma usuária ao término da execução, confirmei com ela se recebeu as mensagens, ela retornou que sim.

                      Pelo que entendi os jobs não estão em lock mas o campo que identifica a nova data/hora de execução não esta atualizando.

                      #84857
                      airoosp
                      Participante

                        O erro ORA-00932 que apareceu é alguma incompatibilidade de campo pois vendo a estrutura da tabela retirei do select os campos CUR_SES_LABEL, CLEARANCE_HI, CLEARANCE_LO que são do tipo MLSLABEL e a consulta retornou 8 linhas.

                        #84858
                        David Siqueira
                        Participante

                          Faça o seguinte então, remova esse job e recrie novamente com os mesmos intervalos de tempo e monitore, isso ocorre aqui comigo também em umas bases que tenho, e o que eu faço é remover e recria-los, e fique atento se depois desse processo se a coluna ainda continua nula ou se pelo menos ele voltou a controlar a execução do job gravando o NEXT_DATE da tabela.

                          Abcs.

                          #84859
                          airoosp
                          Participante

                            O job que foi iniciado no dia 17/01/2009 estava executando um select com dblink mas parece que ficou bloqueado por algum motivo, talvez seja falha na comunicação, executei um kill nesta sessão, vou verificar o que acontecerá com os jobs que foram iniciados ontem.

                            #84860
                            David Siqueira
                            Participante

                              Ha..pensei que era apenas um problema de JOB com falhas de execução ou algum tipo de erro por conta de um BUG , agora a coisa muda um pouco, nunca vi esse erro, mais vou checkar e qq novidade posto aqui pra te ajudar.

                              Abcs
                              David

                              #84861
                              David Siqueira
                              Participante

                                Repare na solução dada neste post:

                                http://www.techonthenet.com/oracle/errors/ora00932.php

                                Acredito que teras que mudar sua tabela estruturalmente, caso queira que funcione 100% seu procedimento.

                                Abcs.

                                David

                                #84862
                                airoosp
                                Participante

                                  Obrigado vou verificar.

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