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

      Amigos, uma aplicação está apresentando erro ORA-00942 table or view does not exist.

      É possível descobrir no banco qual a tabela que a aplicação tenta acessar?

      #101413
      leandrolbs
      Participante

        no trace não aparece? creio que seja possivel veriricar…

        #101414
        felipeg
        Participante

          Peterson.

          Pega a sessão antes de executar o erro e gera um trace.
          Executa e o erro e procura no trc pelo código do erro que o comando aparece.

          Atenciosamente,
          Felipe.

          #101423
          Peterson
          Participante

            Felipe, ativei a auditoria com a cláusula not exists para o usuário e achei a dita cuja…

            Acho q foi mais ou menos isso q vc sugeriu correto?

            Valeu pela ajuda! Salvou!

            😀

            #101426
            felipeg
            Participante

              Opa Peterson,

              Interessante essa sua solução mas eu sugeri um pouquinho diferente.
              Era pra gerar um trace da sessão que iria dar o erro e depois usar o tkprof pra abrir.

              Dentro do log iria aparecer algo assim

              TKPROF: Release 10.2.0.3.0 - Production on Thu Oct 27 11:00:04 2011

              Copyright (c) 1982, 2005, Oracle. All rights reserved.

              Trace file: orcl10_ora_4380.trc
              Sort options: default


              count = number of times OCI procedure was executed
              cpu = cpu time in seconds executing
              elapsed = elapsed time in seconds executing
              disk = number of physical reads of buffers from disk
              query = number of buffers gotten for consistent read
              current = number of buffers gotten in current mode (usually for update)
              rows = number of rows processed by the fetch or execute call


              The following statement encountered a error during parse:

              SELECT SYSDATE FROM bla

              Error encountered: ORA-00942


              SELECT *
              FROM
              dual

              call count cpu elapsed disk query current rows


              Parse 1 0.03 0.02 0 0 0 0
              Execute 1 0.00 0.00 0 0 0 0
              Fetch 1 0.00 0.00 0 3 0 1


              total 3 0.03 0.02 0 3 0 1

              Misses in library cache during parse: 1
              Optimizer mode: ALL_ROWS
              Parsing user id: 711

              Rows Row Source Operation


                1  TABLE ACCESS FULL DUAL (cr=3 pr=0 pw=0 time=254 us)
              

              Ai era só procurar pelo ORA-00942 e ver o comando logo acima.
              Bom de qualquer forma funcionou 8)

              Atenciosamente,
              Felipe.

              #101427
              leandrolbs
              Participante

                uma forma tbm, é criar um trigger AFTER SERVERERROR ON DATABASE e olhar na session o sql executado….

                #101430
                Peterson
                Participante

                  Amigos, testei as duas sugestões e também são válidas! Obrigado pela ajuda e por complementar o tópico com mais opções mesmo depois de Resolvido!

                  Abraços a todos!

                  #101452
                  vieri
                  Participante

                    ===========================

                    Auditar errors na instância

                    create table
                    log (
                    dt date,
                    usr varchar2(30),
                    stmt varchar2(4000)
                    );

                    Table created.

                    create or replace trigger catch_error
                    after servererror on database
                    declare
                    l_text ora_name_list_t;
                    l_n number;
                    l_stmt varchar2(4000);
                    begin
                    l_n := ora_sql_txt( l_text );
                    for i in 1 .. nvl(l_text.count,0)
                    loop
                    l_stmt := l_text(i);
                    end loop;
                    l_stmt := l_stmt || ‘=> ‘;
                    for i in 1 .. ora_server_error_depth
                    loop
                    l_stmt := l_stmt || ora_server_error_msg(i);
                    end loop;
                    insert into log values ( sysdate, user, l_stmt );
                    end;
                    /

                    use com prudência!

                    #101453
                    Peterson
                    Participante

                      excelente Vieri! Obrigado!

                      #101454
                      jspaulonci
                      Participante

                        Eu ia sugerir a trigger de after error mas acredito que a solução do audit foi a mais barata (menos overhead)
                        Essas triggers de sistema são pessadas, mesmo filtrando

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