Pular para o conteúdo
  • Este tópico contém 3 respostas, 3 vozes e foi atualizado pela última vez 12 anos, 8 meses atrás por Priscilla Matos.
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #105192
    Priscilla Matos
    Participante

      Boa tarde a todos,

      Tenho uma base de dados ORACLE, onde temos um Owner MASTER, e um usuário que enxerga os objetos dele, chamado USER1 e esse usuário é utilizado para conexão com banco de dados, fazendo a ponte entre aplicação e banco de dados.

      Criei os sinônimos públicos para as tabelas e views desse esquema MASTER, até aí sem problemas.

      Porém, existe um processo que chama uma determinada procedure e debugando me deparei com o erro “objeto não existe”, e descobri na verdade, que o erro é a falta do sinônimo público para essa procedure.

      Tanto é que criando o sinônimo público para ele, o erro parou de ocorrer.

      Minha dúvida é, é OBRIGATÓRIO o uso de sinônimo para TODAS as procedures ou depende de cada caso?

      Grata,
      Priscilla.

      #105195
      rman
      Participante

        @Priscilla_Matos

        Funciona da seguinte forma, quando um objeto é acessado sem especificar o owner o Oracle entende que o objeto é do próprio owner. Quando o USER1 acessa por exemplo a procedure atualizaValor da seguinte forma:


        BEGIN
        atualizaValor;
        END;

        O Oracle procedure dentro do schema USER1 a procedure atualizaValor, mas como não existe, é apresentado o erro.

        Para o USER1 acessar a procedure atualizaValor que é do MASTER, é necessário especificar o owner da seguinte forma:


        BEGIN
        MASTER.atualizaValor;
        END;

        Pelo que percebi a forma utilizada para especificar o owner foi a criação do SYNONYM. Respondendo a pergunta inicial, realmente é necessário especificar o owner em qualquer ocasião.

        Só uma observação, quando se cria SYNONYM público, todos os usuários terão acesso a esse SYNONYM, o ideal é criar o SYNONYM apenas no usuário USER1.

        #105201
        Fábio Prado
        Participante

          @Priscilla_Matos,

          Apenas complementando o que o @rman comentou, é necessário criar sinônimos para objetos (tabela, visão, procedure ou qq outro) somente se vc não está especificando na aplicação o OWNER destes objetos. Não recomendo criar sinônimos públicos para qq ocasião. Pelo que eu entendi, para esta situação específicia seria melhor criar um sinônimo privado.

          Para criar um sinônimo privado o usuário da aplicação tem que ter o privilégio <strong>CREATE SYNONYM</strong> e vc tem que estar logado com este usuário para criá-lo.
          

          []s

          #105210
          Priscilla Matos
          Participante

            Obrigada pela ajuda. 🙂

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