Criando e Gerenciando Sinônimos - Oracle

Olá Pessoal depois de uma longa jornada de estudos para prova 1Z0-042, finalmente de volta postando mais um artigo.
Hoje iremos abordar um assunto que para muitos pode ser fácil, mas ja vi muitos desenvolvedores e iniciantes com dúvidas ao criarem sinonimos e não entenderem o que realmente estão fazendo. Eu mesmo era uma dessas pessoas que no início não sabia o que estava fazendo quando rodava scripts de criação de Sinonimos. Apenas rodava o script por rodar.
Se você é uma dessas pessoas que so rodam scripts de criação de sinonimos e não entende como realmente cria ou gerencia sinonimos, vale apena dar uma lida neste artigo.

Mas o que seriam Sinonimos(Synonyms)?

- Sinonimos nada mais é que um alias de um objeto de um outro SCHEMA para outro.

Um sinonimo pode ser criado para uma table, view, sequence, procedure, function ou package no Banco de Dados Local.
Podemos também criar sinonimo via Database Link para um objeto em um outro Banco de Dados.

——————————————————————————————————-
Existem 2 tipos de sinonimos:

- Sinonimos Privados (Default)
Sinonimos Privados são mais recomendados por motivo de segurança.
Criando Sinonimo Privado:
CREATE OR REPLACE SYNONYM <synonym_name> FOR <object_name>;
Dropando Sinonimo Privado:
DROP SYNONYM <synonym_name>;

- Sinonimos Públicos
Somente Usuarios com Privilegio DBA podem criar Sinonimos Publicos.
O Sinonimo Publico estará disponivel para todos os Usuários do Banco de Dados com os privilégios apropriados.
Criando Sinonimo Publico:
CREATE OR REPLACE PUBLIC SYNONYM <synonym_name> FOR <object_name>;
Dropando Sinonimo Publico:
DROP PUBLIC SYNONYM <synonym_name>;

——————————————————————————————————-

Bom então para entendermos melhor simularemos um ambiente. Segue abaixo o ambiente:
- Temos o usuario(Schema)Bruno que contém a Tabela Cliente.

- Temos o usuairo(Schema)Murassaki que gostaria de executar SELECT na Tabela Cliente do Usuario Bruno.

- Objetivo: Criar Sinonimo Privado para o Usuario Murassaki no qual terá privilégio de executar SELECT na Tabela Cliente pertencente ao Usuario Bruno.

——————————————————————————————————-

Passo1: Conectar com usuario SYS ou SYSTEM, conceder privilegio de Criar Sinonimo ao Usuario Murassaki:

SQL> GRANT CREATE SYNONYM TO MURASSAKI;

Grant succeeded.

——————————————————————————————————-

Passo2: Conectar com usuario Bruno e conceder privilegio de SELECT na tabela Cliente para o Usuario Murassaki:

SQL> GRANT SELECT ON CLIENTE TO MURASSAKI;

Grant succeeded.

Obs:Lembrando que neste passo2 é o momento em define o nível de privilegio a ser concedido. Neste caso apenas o privilégio de SELECT.

——————————————————————————————————-

Passo3: Podemos verificar ao conectar no Usuario Murassaki antes de criarmos o sinonimo notaremos que ja temos acesso a tabela Cliente:

SQL> SELECT * FROM BRUNO.CLIENTE;

ID NAME
———- ——————————
1 JOSE
2 MARIA
3 JOANA
4 JOAO

Alguns podem estar se perguntando, mas pra que o sinonimo? Ai é que está, ele serve para não precisar referenciar o nome do <Usuario.Tabela> e sim apenas o nome da Tabela como se fosse parte do Schema Murassaki.

——————————————————————————————————-

Passo4: Conectar com usuario Murassaki e criar o sinonimo da Tabela Cliente.

SQL> CREATE OR REPLACE SYNONYM CLIENTE FOR BRUNO.CLIENTE;

Synonym created.

——————————————————————————————————-

Passo5: Ainda conectado com usuario Murassaki ja podemos testar o sinonimo:

SQL> SELECT * FROM CLIENTE;

ID NAME
———- ——————————
1 JOSE
2 MARIA
3 JOANA
4 JOAO

——————————————————————————————————-

Pronto Sinonimo criado com sucesso.

Espero ter ajudado e esclarecido algumas dúvidas.

Abraço

Bruno Murassaki

4 Respostas para “Criando e Gerenciando Sinônimos - Oracle”

  1. Wilson Says:

    Isso ai brunão, muito bom esse post.
    Será muito útil no dia-a-dia.

    Abraço.

  2. Bruno Murassaki Says:

    Fala Wilson

    Que bom que gostou kara , pois aqui na empresa observei que existia muitos programadores em dúvidas com este tema.

    Abraço.

  3. Sabino Neto Says:

    Brunao, tenho uma duvida.

    Eu tenho um dblink no servidor A e esse se conecta com uma base de um outro servidor B.

    Eu estou migranda a base para um servidor C mas esse eu nao poderei criar o dblink apontando para a base B pois nao tenho permição de conexao. Assim estou tentando criar uma ‘proc’ dentro do servidor C que usa um sinonimo para chamar o dblink do servidor A.

    Na execução da proc esta dando erro que eu nao posso colocar o sinonimo dentro da proc.

    Voce teria uma dica para esse cenario ?

  4. Bruno Murassaki Says:

    Olá Sabino tudo bem? Desculpa a demora…

    Bom vamos ver se entendi e se consigo te ajudar.

    Revisar os seguintes ítens:

    - Verificar Privilégios (Grants) concedidos para este sinonimo da ‘proc’

    - Verificar se o nome do sinonimo esta concedido corretamente na ‘proc’

    - Verificar o dblink do servidor C para o Servidor A.

    - Por favor enviar o erro que esta ocorrendo, pois talvez consiga te ajudar melhor.

    Abraço,

    Bruno Murassaki

Deixe um comentário