Pular para o conteúdo
Visualizando 11 posts - 1 até 11 (de 11 do total)
  • Autor
    Posts
  • #100674
    rman
    Participante

      Boa tarde !

      Seguinte, estou recebendo o seguinte erro:

      ora-00980: synonym translation is no longer valid

      Infelizmente não consigo identificar qual a consulta que está sendo gerada, pois é um consulta feita por um sistema terceirizado, não tenho acesso ao fonte, logo não consigo debugar a aplicação.

      Como identificar a consulta ?

      Pensei em gerar o trace da conexão do cliente, mas nunca fiz isso e nem sei se isso pode ajudar, alguma sugestão ? Se o trace me mostrará a consulta causadora do erro, como fazer o trace ?

      #100675
      Peterson
      Participante

        rman, esse erro passou a ocorrer após algum fato relevante?

        #100676
        Peterson
        Participante

          executa a query e veja oq retorna…


          SELECT * FROM dba_objects
          WHERE status = 'INVALID'
          AND object_type = 'SYNONYM';

          talvez dê pra achar o danado com isso…

          #100677
          Marcio68Almeida
          Participante

            Provavelmente a aplicação está fazendo referência a algum sinônimo que foi criado no ambiente de testes e desenvolvimento e não foi replicado para o seu ambiente…
            Você pode procurar na view V$SQL, porém é muito mais sensato que você entre em contato com o fornecedor da aplicação e que ele passe a correção, pelo menos a lista de objetos para que você possa fazer a comparação dos faltantes…

            #100679
            rman
            Participante

              @Peterson

              O erro acontece na base de homologação, houve uma importação recente que atualizou os dados da base de produção para a de homologação. Amanhã pela manhã vou executar a consulta, mas creio que não exista nenhum invalido, talvez esteja faltando mesmo como disse o Marcio68Almeida.

              @Marcio68Almeida

              Não vou conseguir achar na view V$SQL, simplismente por que eu não sei qual é a query que estou procurando… 😯 . Por isso pensei em fazer o trace, o trace pode identificar a consulta ? Ou a ideia do trace não é essa ?

              #100680
              Marcio68Almeida
              Participante

                A ideia do trace é identificar os caminhos que o Oracle está fazendo para executar uma determinada tarefa.
                Creio que o melhor lugar seria nos logs do banco de dados.
                A view V$SQL poderia ajudar mostrando quais as consultas que estão sendo executadas.
                Existem outras views que podem auxiliar na identificação dos processos com erro, mas o ideal é ver com o fabricante do produto, ele certamente tem a resposta, principalmente por que você está testando uma nova versão, não é isso ???

                #100681
                rman
                Participante

                  @Marcio68Almeida

                  Concordo com você, já tinha solicitado ao programador entrar em contato com a empresa responsável.

                  @Peterson

                  Realmente não existe nenhum SYNONYM invalido.

                  #100687
                  ithigvo
                  Participante

                    @rman você pode criar uma trigger para capturar os erros no banco e gravá-los em uma tabela log. Essa trigger é disparada sempre que um erro ocorre na instância, e você consegue obter preciosas informações sobre ele (na documentação oracle existe uma lista de ORA- que não são capturados pela trigger)

                    Segue um pequeno exemplo que uso para pegar esses bugs…

                    --Cria tabela para log dos erros
                    create table mag_t_erros(
                    data date,
                    usuario varchar2(30),
                    msg_erro varchar2(4000),
                    stmt_erro varchar2(4000)
                    );

                    --Cria trigger
                    create or replace trigger mag_tr_erros
                    after servererror on database
                    declare
                    sql_text ora_name_list_t;
                    msg_erro varchar2(4000) := null;
                    stmt_erro varchar2(4000) := null;

                    begin
                    for depth in 1 .. ora_server_error_depth loop
                    msg_erro := msg_erro || ora_server_error_msg(depth);
                    end loop;

                    for i in 1 .. ora_sql_txt(sql_text) loop
                    stmt_erro := stmt_erro || sql_text(i);
                    end loop;

                    insert into mag_t_erros
                    values
                    (sysdate, ora_login_user, substr(msg_erro,1,4000), substr(stmt_erro, 1, 4000));

                    end;

                    #100688
                    rman
                    Participante

                      @ithigvo

                      Obrigado pela dica, só não sei se posso implantar a trigger no servidor de produção…

                      #100692
                      ithigvo
                      Participante

                        @rman realmente, eu aconselho a implementação apenas em homologação, e ativá-la apenas nos momentos em que precisar procurar os erros.

                        #100714
                        Peterson
                        Participante

                          rman, esse problema foi resolvido?

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