
SYNONYM Oracle : Créer et Gérer des Alias d’Objets SQL
Le SYNONYM Oracle est un objet de base de données permettant de créer un alias vers un autre objet SQL (table, vue, séquence, procédure, etc.). Indispensable dans les environnements multi-schémas d’entreprise, le SYNONYM Oracle simplifie l’accès aux objets distants, améliore la lisibilité du code et renforce l’abstraction entre les couches applicatives et la base de données.
Définition et utilisation d’un SYNONYM Oracle
Un SYNONYM est littéralement un « nom alternatif » pointant vers un objet existant dans Oracle. Il ne contient aucune donnée propre : il ne fait que rediriger les requêtes SQL vers l’objet cible.
Pourquoi utiliser un SYNONYM ?
En entreprise, les bases de données Oracle sont souvent organisées en plusieurs schémas distincts (ex. : FINANCE, RH, VENTES). Sans synonymes, un développeur du schéma APP devrait systématiquement préfixer chaque objet avec le nom du schéma propriétaire :
SELECT * FROM RH.EMPLOYES;Grâce à un synonyme, il peut simplement écrire :
SELECT * FROM EMPLOYES;Les deux types de synonymes Oracle
- PRIVATE SYNONYM : visible uniquement par l’utilisateur qui l’a créé (ou les utilisateurs auxquels il a accordé des droits).
- PUBLIC SYNONYM : visible par tous les utilisateurs de la base de données. Nécessite le privilège
CREATE PUBLIC SYNONYM.
Cas d’usage typiques en entreprise
- Masquer le nom réel du schéma propriétaire d’un objet.
- Simplifier l’accès à des objets via un Database Link (lien vers une base distante).
- Faciliter la migration ou le renommage d’objets sans modifier le code applicatif.
- Centraliser l’accès aux objets partagés entre plusieurs applications.
Syntaxe du SYNONYM Oracle
Créer un synonyme
CREATE [OR REPLACE] [PUBLIC] SYNONYM [schéma.]nom_synonyme
FOR [schéma.]nom_objet[@nom_db_link];Explication des paramètres essentiels
| Paramètre | Description |
|---|---|
OR REPLACE | Recrée le synonyme s’il existe déjà, sans erreur. Utile en développement. |
PUBLIC | Rend le synonyme accessible à tous les utilisateurs de la base. |
[schéma.]nom_synonyme | Nom du synonyme à créer, optionnellement préfixé du schéma cible. |
FOR [schéma.]nom_objet | Objet Oracle cible (table, vue, séquence, fonction, procédure, package…). |
@nom_db_link | Optionnel. Permet de pointer vers un objet situé sur une base de données distante via un Database Link. |
Supprimer un synonyme
DROP [PUBLIC] SYNONYM [schéma.]nom_synonyme;⚠️ La suppression d’un synonyme ne supprime pas l’objet cible.
Exemples pratiques de SYNONYM Oracle
Exemple 1 – Synonyme privé pour simplifier l’accès inter-schémas
Contexte métier : L’application de facturation utilise le schéma APP_FACT. Elle doit accéder à la table CLIENTS appartenant au schéma CRM. Pour éviter de préfixer chaque requête, on crée un synonyme privé dans APP_FACT.
-- Connexion en tant que APP_FACT
-- Création d'un synonyme privé pointant vers la table CLIENTS du schéma CRM
CREATE OR REPLACE SYNONYM clients
FOR CRM.CLIENTS;
-- Utilisation du synonyme : la requête est simplifiée
SELECT client_id, nom, email
FROM clients
WHERE statut = 'ACTIF';
-- Sans synonyme, la requête aurait nécessité :
-- SELECT client_id, nom, email FROM CRM.CLIENTS WHERE statut = 'ACTIF';
✅ Résultat : Le code applicatif ne dépend plus du nom du schéma propriétaire. Si la table CLIENTS est déplacée vers un autre schéma, il suffit de mettre à jour le synonyme sans toucher au code.
Exemple 2 – Synonyme public pour un accès partagé à une procédure stockée
Contexte métier : Le schéma DBA_TOOLS héberge une procédure GENERER_RAPPORT utilisée par toutes les équipes. Plutôt que d’accorder des droits sur le schéma complet, l’administrateur crée un synonyme public.
-- Connexion en tant que DBA ou utilisateur avec CREATE PUBLIC SYNONYM
-- Création du synonyme public pour la procédure stockée
CREATE OR REPLACE PUBLIC SYNONYM generer_rapport
FOR DBA_TOOLS.GENERER_RAPPORT;
-- Tout utilisateur de la base peut maintenant appeler la procédure directement
BEGIN
generer_rapport(
p_type => 'MENSUEL',
p_annee => 2024,
p_mois => 10
);
END;
/
-- Suppression du synonyme public si nécessaire
DROP PUBLIC SYNONYM generer_rapport;
✅ Résultat : Les équipes métier appellent la procédure sans connaître ni le schéma propriétaire, ni la structure interne de la base.
Erreurs courantes avec les SYNONYM Oracle
Erreur ORA-01434 : « synonym does not exist » ou ORA-00980 : « synonym translation is no longer valid »
Description : Ces erreurs surviennent lorsqu’un synonyme pointe vers un objet qui a été supprimé, renommé ou déplacé. Oracle crée les synonymes sans vérifier l’existence de l’objet cible au moment de la création (late binding). Un synonyme peut donc être créé avec succès même si l’objet n’existe pas encore — ou ne existe plus.
Exemple de situation problématique :
-- Création d'un synonyme vers une table inexistante : Oracle accepte sans erreur !
CREATE SYNONYM syn_commandes FOR VENTES.COMMANDES;
-- À l'utilisation, Oracle retourne :
-- ORA-00980: synonym translation is no longer valid
SELECT * FROM syn_commandes;
Solution : Vérifier l’état des synonymes avec la vue DBA_SYNONYMS ou USER_SYNONYMS, et s’assurer que l’objet cible existe et est accessible :
-- Vérifier les synonymes de l'utilisateur courant
SELECT synonym_name, table_owner, table_name, db_link
FROM user_synonyms
ORDER BY synonym_name;
-- Vérifier si l'objet cible existe dans le schéma VENTES
SELECT object_name, object_type, status
FROM dba_objects
WHERE owner = 'VENTES'
AND object_name = 'COMMANDES';
Résumé
| Point clé | Détail |
|---|---|
| Objet Oracle | SYNONYM = alias vers un objet existant |
| Types | PRIVATE (utilisateur) / PUBLIC (toute la base) |
| Objets supportés | Tables, vues, séquences, procédures, fonctions, packages, Database Links |
| Création | CREATE [OR REPLACE] [PUBLIC] SYNONYM … FOR … |
| Suppression | DROP [PUBLIC] SYNONYM … |
| Vues système | USER_SYNONYMS, ALL_SYNONYMS, DBA_SYNONYMS |
| Binding | Late binding : Oracle ne valide pas l’existence de l’objet cible à la création |
| Erreur fréquente | ORA-00980 si l’objet cible est supprimé ou renommé |
2 bonnes pratiques Oracle à retenir
- Préférez les synonymes privés aux synonymes publics dans les environnements de production. Les synonymes publics sont visibles par tous les utilisateurs, ce qui peut créer des ambiguïtés ou des failles de sécurité si leur gestion n’est pas rigoureuse. Réservez
PUBLIC SYNONYMaux objets véritablement partagés à l’échelle de toute la base. - Utilisez toujours
CREATE OR REPLACE SYNONYMdans vos scripts de déploiement plutôt queCREATE SYNONYMseul. Cette approche idempotente évite les erreurs en cas de redéploiement et simplifie la maintenance des scripts en intégration continue.
Aller plus loin
Pour approfondir vos connaissances sur les objets Oracle et optimiser votre architecture de base de données, consultez également ces sujets complémentaires :
- DATABASE LINK Oracle : accéder à des bases de données distantes — Indispensable pour comprendre les synonymes pointant vers des objets sur d’autres instances Oracle.
- Les VUES Oracle (VIEW) : définition, création et cas d’usage — Les synonymes et les vues sont souvent combinés pour abstraire efficacement la structure des données.
- Gestion des PRIVILEGES et GRANTS en Oracle SQL — Créer un synonyme ne suffit pas : découvrez comment attribuer les droits d’accès nécessaires sur les objets sous-jacents.
