ORA-12154 « TNS could not resolve » : la solution pas à pas

ORA-12154 « TNS could not resolve » : la méthode pas à pas pour corriger la résolution de l'alias de connexion Oracle (tnsnames.ora, TNS_ADMIN).

Illustration de l'erreur Oracle ORA-12154

ORA-12154 « TNS:could not resolve the connect identifier specified » signifie que le client Oracle n’arrive même pas à trouver la base à contacter : l’alias de connexion que vous utilisez n’est pas résolu. C’est une erreur de configuration côté client — voici la méthode pas à pas pour la corriger définitivement.

Publicité

🧪 Envie de pratiquer ? Exécutez les exemples de cet article dans notre SQL Playground gratuit — aucun logiciel à installer.

Comprendre l’erreur en 10 secondes

Quand vous écrivez sqlplus user@MABASE, le client doit traduire MABASE en « hôte + port + service ». Cette traduction passe (en général) par le fichier tnsnames.ora. ORA-12154 = « je ne sais pas ce qu’est MABASE ». La base elle-même n’est peut-être même pas en cause.

Étape 1 — Vérifier l’alias dans tnsnames.ora

# Où est mon tnsnames.ora ?
#   $ORACLE_HOME/network/admin/tnsnames.ora
#   ou le dossier pointé par la variable TNS_ADMIN

MABASE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = srv-oracle01)(PORT = 1521))
    (CONNECT_DATA = (SERVICE_NAME = orclpdb1))
  )

Vérifiez : l’alias existe-t-il ? exactement avec ce nom ? sans faute de frappe ? Testez ensuite la résolution :

tnsping MABASE

tnsping OK = l’alias se résout (si la connexion échoue ensuite, c’est un autre problème, par ex. ORA-01017). tnsping KO avec TNS-03505 = même cause qu’ORA-12154.

Étape 2 — Vérifier QUEL tnsnames.ora est lu (le piège classique)

Plusieurs clients Oracle installés = plusieurs tnsnames.ora possibles. Le client utilise celui de son ORACLE_HOME, sauf si TNS_ADMIN est défini :

# Windows
echo %TNS_ADMIN%
echo %ORACLE_HOME%

# Linux/macOS
echo $TNS_ADMIN
echo $ORACLE_HOME

Conseil : définissez TNS_ADMIN vers un dossier unique partagé par tous vos outils — fini les surprises « ça marche dans SQL Developer mais pas dans mon appli ».

Étape 3 — Les pièges de syntaxe du fichier

  • Parenthèse manquante ou en trop — une seule suffit à casser la lecture du fichier à partir de cette entrée.
  • Espace/indentation en début de première ligne d’une entrée : l’alias doit commencer en colonne 1.
  • Caractères invisibles après un copier-coller (guillemets typographiques, BOM).
  • Fichier édité mais non sauvegardé au bon endroit (droits insuffisants → sauvegardé ailleurs par l’éditeur).

Étape 4 — Contourner pour diagnostiquer : la syntaxe EZConnect

Sans toucher au fichier, testez en direct « hôte:port/service » :

sqlplus user@"srv-oracle01:1521/orclpdb1"

✅ Ça marche → le problème est bien votre alias/tnsnames.ora.
❌ Ça échoue avec ORA-12541 (no listener) → le souci est côté serveur/réseau, pas la résolution.

Cas particuliers fréquents

  • Application .NET/JDBC : la chaîne de connexion de l’appli n’utilise pas le même mécanisme que votre poste — préférez-y la forme complète host:port/service.
  • Windows + chemin avec parenthèses : un client 32 bits installé dans C:\Program Files (x86) peut provoquer ORA-12154 avec certains drivers — installez le client hors de ce chemin.
  • LDAP/Active Directory : si votre entreprise résout les alias via LDAP (ldap.ora), vérifiez NAMES.DIRECTORY_PATH dans sqlnet.ora (ex. (LDAP, TNSNAMES, EZCONNECT)).

Checklist de résolution

  1. tnsping MONALIAS → se résout-il ?
  2. TNS_ADMIN / ORACLE_HOME → le bon fichier est-il lu ?
  3. Syntaxe du tnsnames.ora (parenthèses, colonne 1) ?
  4. Test EZConnect host:port/service pour isoler.
  5. App ≠ poste : vérifier la chaîne de connexion de l’application elle-même.

FAQ

Quelle différence entre ORA-12154 et ORA-12541 ?

ORA-12154 : l’alias ne se résout pas (problème client/config). ORA-12541 : l’alias se résout mais aucun listener ne répond sur l’hôte:port (problème serveur/réseau).

SERVICE_NAME ou SID ?

Préférez SERVICE_NAME (standard moderne, obligatoire avec les PDB multitenant). SID ne fonctionne que sur les configurations historiques.

Ça marche dans SQL Developer mais pas dans mon script ?

SQL Developer peut utiliser son propre mécanisme (connexion enregistrée) sans passer par tnsnames.ora. Votre script, lui, dépend de TNS_ADMIN — alignez les deux.

Un nouveau tutoriel SQL par semaine

Nous ne spammons pas ! Consultez notre politique de confidentialité pour plus d’informations.

Publicité

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Publicité