SYNONYM

Un sinonimo è l'alias di una tabella o vista sulla quale possono essere eseguite istruzioni SQL e come le Viste non memorizza dati.

S i n t a s s i
CREATE [PUBLIC] SYNONYM nome_sinonimo FOR nome_oggetto;

E' utile per accedere ad una tabella o vista indipendentemente dalla conoscenza dello schema e del db.

Ad esempio per eseguire la seguente query:
select * from hr.employees@prod;
L'utente deve accedere al db "prod" e conoscere lo schema HR.
Se si crea un sinonimo pubblico:
CREATE PUBBLIC SYNONYM emp FOR hr.employees@prod;
allora un utente, che ha la grant di select sul sinonimo, deve semplicemente eseguire la query:
select * from emp;

Un sinonimo PUBBLICO non è uno schema object, pertanto non è necessario che sia definito il prefisso di uno schema e può avere lo stesso nome di un altro schema object; quindi quando viene eseguita una istruzione su quell'oggetto, Oracle cercherà prima l'oggetto nello schema locale e se non lo trova cerca un sinonimo pubblico. Nell'esempio precedente se per quell'user esiste una tabella EMP allora Oracle interrogherà questa tabella e non il sinonimo pubblico.

Al contrario i sinonimi PRIVATI sono schema object e quindi devono avere un nome unico all'interno del loro schema e devono essere preceduti dal nome dello schema.

CREATE SYNONYM <nome_schema>.nome_sinonimo FOR nome_oggetto;


Per creare sinonimi occorrono le grant.
Di solito solo il dba può eseguire il drop dei sinonimi perché sono visibili da più utenti.

DROP [PUBLIC] SYNONYM nome_sinonimo;

Se viene eseguito il drop di un sinonimo privato, un qualsiasi altro sinonimo pubblico con lo stesso nome non verrà invalidato.
Come le viste anche i sinonimi continuano ad esistere se viene eseguito il drop degli oggetti che lo definiscono.
Se però viene interrogato il sinonimo viene mostrato un messaggio di errore.
Se gli oggetti sono poi ricreati allora il sinonimo (come le viste) vengono ricompilati in automatico al primo utilizzo a meno che non si ricompilino esplicitamente:

ALTER SYNONYM nome_sinonimo COMPILE;

USER_SYNONYMS è una vista del Data Dictionary, schema SYS, che visualizza i sinonimi privati di un account user.

Per visualizzare i sinonimi pubblici usare le viste ALL_SYNONYMS o DBA_SYNONYMS.
Solo le utenze con il privilegio SYSDBA o SELECT ANY DICTIONARY possono eseguire query sulle viste DBA_.

Script creazione:

select DBMS_METADATA.get_ddl ('SYNONYM', synonym_name, owner) 
from dba_synonyms 
where synonym_name ='nome_sinonimo';

Post popolari in questo blog

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione

Create e Drop Pluggable Database