Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #107025
    Avatar de armandovelosoarmandoveloso
    Participante

      Bom dia!

      Temos um banco em 10G e estamos testando-o no 11G. Há uma trigger, no schema SYSTEM, que não está compilando no 11G, enquanto que no 10G está compilada com sucesso e em produção.

      Gostaria da ajuda de vocês, pois não estamos contando com desenvolvedores PL/SQL e eu dou apenas suporte no banco.

      De cara parece erro de permissão na tabela V$SESSION, mas o usuário SYSTEM consegue sem problemas fazer select nessa tabela, mas dentro da trigger não é reconhecida a v$session.

      Segue trecho inicial da trigger:


      create or replace trigger SYSTEM.TG_LOGON
      after logon
      on database

      declare
      v_sess v$session%rowtype;
      v_num number;

      begin

      select *
      into v_sess
      from v$session
      (…)

      Os erros:

      LINE/COL ERROR
      ——– —————————————————————–
      3/13 PL/SQL: Item ignored
      3/13 PLS-00201: identifier ‘V$SESSION’ must be declared
      8/4 PL/SQL: SQL Statement ignored
      10/12 PL/SQL: ORA-00942: table or view does not exist
      14/4 PL/SQL: Statement ignored
      14/14 PLS-00320: the declaration of the type of this expression is
      incomplete or malformed

      23/3 PL/SQL: Statement ignored
      23/8 PLS-00320: the declaration of the type of this expression is
      incomplete or malformed

      Obrigado!
      Armando

      #107027
      Avatar de rmanrman
      Participante

        @armandoveloso

        Com o usuário SYS conceda o privilégio:


        GRANT SELECT ON SYS.V_$SESSION TO SYSTEM;

        O PL/SQL não reconhece os privilégios concedidos por meio de ROLES, por isso é necessário conceder o privilégio de forma explicita.

        Creio que esse erro não é devido a mudança do 10g para o 11g. Provavelmente no 10g também foi concedido o privilégio de forma explicita. Verifique no 10g se o usuário SYSTEM possui o privilégio:


        SELECT *
        FROM DBA_TAB_PRIVS
        WHERE GRANTEE = 'SYSTEM'
        AND OWNER = 'SYS'
        AND TABLE_NAME = 'V_$SESSION'

        #107028
        Avatar de armandovelosoarmandoveloso
        Participante

          RMAN,

          O select não retornou nenhum registro, tabto no BD 10g quanto no 11g, rodei logado como SYS.

          Porém, explicitar o grant de select RESOLVEU o problema!

          Há algo estranho, né?

          De toda forma, agradeço sua atenção e SOLUÇÃO do problema!

          Abraço!

          #107029
          Avatar de rmanrman
          Participante

            @armandoveloso

            Só uma pergunta. O que faz exatamente essa trigger de evento? Realmente é necessário está no schema SYSTEM?

            Eu recomendo não criar nenhum objeto dentro do schema SYSTEM e SYS.

            Dependendo do que a trigger faz é interessante estar no schema da própria aplicação.

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