ORA-12154 Le service n’a pu être résolu
ORA-12154 TNS could not resolve service name
mots clés
problême SQL*Net, problême Oracle Net service, erreur SQL*Net, erreur Oracle Net, erreur ORA-12154, erreur Oracle ORA-12154, solution ORA-12154, résolution ORA-12154
Description du problème
problème de résolution de nom de service SQL*Net ou Oracle Net. En clair le nom de la base sur le réseau ne peut pas être traduit (résolu).
Tests
1) vérifier que la base est active sur le serveur, indépendamment du réseau :
- Se connecter directement au serveur
sous Unix / Linux : telnet ou SSH ,
sous Windows : prise de main a distance ou ouverture d’une session directe sur le serveur
On vérifie et positionne le cas échéant l’environnement Oracle de notre session sur le serveur :
- affectation du ORACLE_HOME (répertoire d’installation d’Oracle)
- ORACLE_SID (identifiant local de la base ) ? la bonne valeur,
sous Unix / Linux : export ORACLE_SID = nom_de_la_base
sous Windows : modifier la variable ORACLE_SID, sous DOS, avec la commande SET ORACLE_SID = nom_de_la_base
ou modifier la base de registre avec regedit (software \ oracle \ ORACLE_HOME et ORACLE_SID) avec la bonne valeur
Puis on tente une connexion locale dans un compte connu
cd ORACLE_HOME
cd bin
sqlplus scott/tiger ou sqlplus system/mot_de_passe_system
2) vérifier que le serveur SQLNET est actif
cd ORACLE_HOME
cd bin
lsnrctl stat
3) verifier la méthode de resolution de nom
A PARTIR DU POSTE CLIENT ! : tnsping nom_de_service
Cette commande indique quelle méthode de résolution est utilisée :
- Implicite avec EZCONNECT
- Locale, avec un fichier de traduction locale : ORACLE_HOME/network/admin/tnsnames.ora
- Distante avec un serveur Oracle Names ou LDAP ou DNS
On peut également le vérifier dans le fichier ORACLE_HOME/network/admin/sqlnet.ora ou sont indiquées dans la variable DIRECTORY_PATH, les méthodes de résolution utilisées et dans quel ordre
Résolution de l’erreur ORA-12154
cas 2 : si le serveur SQL*Net / Oracle*Net est inactif, le démarrer :
dans ORACLE_HOME/bin lancer la commande lsnrctl start
remarque : par défaut le serveur démarre sur le port 1521
cas 3 :
solution universelle : forcer la résolution de nom en local :
dans le fichier ORACLE_HOME/network/admin/sqlnet.ora on met la ligne DIRECTORY_PATH= (TNSNAMES)
puis on crée un fichier ORACLE_HOME/network/admin/tnsnames.ora avec la bonne définition du service, calqué sur celle trouvée dans le fichier tnsnames.ora du répertoire SAMPLE.
Il faudra préciser : le nom de la machine serveur (avec son domaine) ou son @IP, le no de port : 1521 et le nom de service Oracle déclaré sur le serveur.
Remarque : le nom de service réseau est souvent pour des raisons de simplicité,identique au nom de service sur le serveur
Solution adaptée :
Attention !!!! le nom se service sur le serveur doit être exactement identique ? celui précisé dans la résolution de nom (indiqué par le tnsping). On peut le vérifier sur le serveur dans le fichier ORACLE_HOME/network/admin/listener.ora. Notamment si le client cherche une base qui s’appelle TEST.mondomaine.fr on doit avoir dans le listener.ora du serveur également TEST.mondomaine.fr , au caractère près.
Resolution locale :
Idem précédemment : dans le fichier ORACLE_HOME/network/admin/sqlnet.ora on met la ligne DIRECTORY_PATH= (TNSNAMES)
puis on crée un fichier ORACLE_HOME/network/admin/tnsnames.ora avec la bonne définition du service, calqué sur celle trouvée dans le fichier tnsnames.ora du répertoire SAMPLE.
Il faudra préciser : le nom de la machine serveur (avec son domaine) ou son @IP, le no de port : 1521 et le nom de service Oracle déclaré sur le serveur.
Résolution LDAP :
**************** ? compléter
Résolution DNS :
dans le fichier ORACLE_HOME/network/admin/sqlnet.ora on met la ligne DIRECTORY_PATH= (HOSTNAME)
et l’on vérifie que le nom de la base est bien résolu par le serveur DNS : ping nom_base.
En cas de problème de DNS, on peut faire appel ? un fichier ‘hosts’ local pour la résolution.
Il se trouve dans /etc/hosts sur Unix et dans WINDOWS\SYSTEM32\DRIVERS\ETC \HOSTS
décembre 18th, 2006 at 1:11
Parfois le problème vient de l’extention .WORLD de sqlnet.ora
février 26th, 2007 at 1:54
Plus généralement il est possible qu\’il y ait une différence entre le nom de service utilisé dans l\’alias défini au niveau du client et le nom de service défini sur le serveur dans le fichier LISTENER.ORA.
Cette différence est souvent lié au nom de domaine, présent d\’un coté et pas de l\’autre.
Le nom de domaine par défaut est \’.WORLD\’.
Mais cela peut être \’votre_domaie.fr\’ par exemple.
S\’il est présent coté client, il faut qu\’il apparaissent coté serveur : ainsi \’ma_base\’ est different de \’ma_base.dd.fr\’.
C\’est un peu comme lorque l\’on ne spécifie pas de domaine par défaut dans la config du DNS, un serveur \’TOTO\’ peut etre introuvable, alors que TOTO.mon_domaine.fr est résolu correctement…
mars 1st, 2007 at 9:27
Bonjour,
Pour moi le problème était un mauvais “connect_identifier”.
Je l’indiquais sous la forme “hote:port:sid”
alors qu’il fallait la forme “sid” tout court
a+ =)
-=Finiderire=-
avril 21st, 2007 at 8:19
J’ai un pbleme de connexeion ? Oracle. J’accede bien ? partit de SQL Plus mais pas ? partir de forms 6 builder. il s’agit d’un problème TNS names pourtant bien configuré en apparence.
quelqu’un peut -t-il m’expliquer pourquoi
merci