web-dev-qa-db-fra.com

Oracle ORA-12154: TNS: impossible de résoudre le nom de service Erreur?

Je suis un utilisateur de SQL Server.

Je suis sur un projet qui utilise Oracle (que j'utilise rarement) Je dois créer une connexion ODBC pour pouvoir accéder à certaines données via MS Access J'ai une application sur ma machine appelée oraHome90. Cela semble permettre une configuration de quelque chose appelé écouteur dans un «utilitaire de configuration réseau», je pense qu’une «configuration de nom de service réseau local» doit également être effectuée. Le support informatique m'a donné ces informations pour configurer la connexion ODBC. J'ai essayé toutes les combinaisons possibles. Je peux passer un test qui réussit un test pour «se connecter» à la base de données du serveur Oracle. Lorsque j'essaie de créer la connexion ODBC, le message d'erreur suivant s'affiche: ORA-12154: TNS: impossible de résoudre le nom du service.

En supposant que je souhaite repartir de zéro et que les informations suivantes me permettent de me connecter à la base de données… .. Des suggestions ou des commentaires? Remarque: au final, le projet aura une page Web .ASP interroger les données, mais je dois d'abord prouver que je peux voir les données à l'aide de la connexion ODBC via MS Access.

Service name: SERVICENAME
Host = Host.XYZi.com
User Id: MYUSERID
Password: MYPASSWORD
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

'Oracle Connection
Dim ocst
Dim oconn

ocst = "Provider=OraOLEDB.Oracle;" & _ 
        "Data Source=DATASOURCE;" & _ 
        "User ID=CHIJXL;" & _ 
        "Password=password;" 

set oconn = CreateObject("ADODB.Connection")
13
Joe

de http://ora-12154.ora-code.com

ORA-12154: TNS: impossible de résoudre l'identificateur de connexion spécifié
Cause: Une connexion à une base de données ou à un autre service a été demandée à l'aide d'un identifiant de connexion. L'identifiant de connexion spécifié n'a pas pu être résolu en un descripteur de connexion à l'aide de l'une des méthodes de nommage configurées. Par exemple, si le type d'identificateur de connexion utilisé était un nom de service réseau, celui-ci était introuvable dans un référentiel de méthode de dénomination ou le référentiel était introuvable.
Action

  • Si vous utilisez un nom local (fichier TNSNAMES.ORA):

  • Assurez-vous que "TNSNAMES" est répertorié comme l'une des valeurs du paramètre NAMES.DIRECTORY_PATH dans le profil Oracle Net (SQLNET.ORA).

  • Vérifiez qu'un fichier TNSNAMES.ORA existe, qu'il se trouve dans le répertoire approprié et qu'il est accessible.

  • Vérifiez que le nom du service réseau utilisé comme identifiant de connexion existe dans le fichier TNSNAMES.ORA.

  • Assurez-vous qu'il n'y a aucune erreur de syntaxe dans le fichier TNSNAMES.ORA. Recherchez des parenthèses sans correspondance ou des caractères parasites. Des erreurs dans un fichier TNSNAMES.ORA peuvent le rendre inutilisable.

  • Si vous utilisez la dénomination de répertoire:

  • Vérifiez que "LDAP" est répertorié comme l'une des valeurs du paramètre NAMES.DIRETORY_PATH dans le profil Oracle Net (SQLNET.ORA).

  • Vérifiez que le serveur d'annuaire LDAP est opérationnel et qu'il est accessible.

  • Vérifiez que le nom de service réseau ou le nom de base de données utilisé comme identifiant de connexion est configuré dans l'annuaire.

  • Vérifiez que le contexte par défaut utilisé est correct en spécifiant un nom de service réseau complet ou un nom distinctif LDAP complet comme identifiant de connexion.

  • Si vous utilisez le nommage easy connect:

  • Vérifiez que "EZCONNECT" est répertorié comme l'une des valeurs du paramètre NAMES.DIRETORY_PATH dans le profil Oracle Net (SQLNET.ORA).

  • Assurez-vous que l'hôte, le port et le nom du service spécifié sont corrects.

  • Essayez de mettre l'identifiant de connexion entre guillemets. Consultez le Guide de l'administrateur Oracle Net Services ou le Guide spécifique au système d'exploitation Oracle pour plus d'informations sur l'attribution de noms.

8
warren

En partant du principe que vous utilisez le nommage TNSNAMES, voici deux choses à faire:

  • Créez/modifiez le fichier tnsnames.ora dans le sous-répertoire network/admin associé à OraHome90 pour inclure une entrée pour votre base de données Oracle:
> SERVICENAME_alias =
>    (DESCRIPTION =
>     (ADDRESS = (PROTOCOL = TCP)(Host = Host.XYZi.com)(PORT = 1521))
>     (CONNECT_DATA = (SERVICE_NAME = SERVICENAME))

Cela suppose que vous utilisez le port Oracle standard de 1521. Notez que nom_service_alias peut être n'importe quel nom que vous souhaitez utiliser sur le système local. Vous pouvez également constater que vous devez spécifier (SID = SERVICENAME) au lieu de (SERVICENAME = SERVICENAME).

  • Exécutez tnsping nom_service_alias pour vérifier la connectivité. Faites-le fonctionner avant d'aller plus loin. Cela vous dira si vous avez dépassé l’erreur 12154.
  • En supposant une bonne connexion, créez un DSN ODBC à l'aide du panneau de configuration, en spécifiant le pilote ODBC pour Oracle de votre choix (généralement, il existe au moins un pilote Microsoft ODBC, qui devrait fonctionner correctement comme preuve de concept). Je prendrai le nom que vous avez donné à DATASOURCE. Utilisez l'alias_nom_service comme nom de serveur dans la configuration ODBC.
  • À ce stade, vous devriez pouvoir vous connecter à votre base de données via Access. Je ne suis pas un programmeur VB, mais je sais que vous devriez pouvoir accéder à Fichier-> Obtenir des données externes-> Tables de liens et vous connecter à votre source ODBC. Je suppose que votre code fonctionnerait aussi bien.
5
DCookie

En référence à # 7 dans ce MSDN POST , l'ajout d'une entrée de registre a fonctionné pour moi. J'avais Vs2010, et Oracle 11.0 installé.

Recherchez la clé de registre «TNS_ADMIN» à l'adresse HKEY_LOCAL_MACHINE\SOFTWARE\Oracle. S'il existe, assurez-vous qu'il a la valeur correcte sous «Dir:\app\product\11.1.0\client_1\network\admin» . Si vous ne voyez pas la clé, créez-la et définissez la valeur appropriée comme ci-dessous. Regedit-> HKEY_LOCAL_MACHINE-> Logiciel-> Oracle-> RightClick NEW-> StringValue et nommez-le TNS_ADMIN et donnez la valeur «X:\app\product\11.1.0\client_1\network\admin»

4
guiomie

J'ai eu du mal à résoudre ce problème pendant des heures jusqu'à ce que je trouve une variable d'environnement appelée TNS_ADMIN définie dans Poste de travail => Propriétés => Avancée => Variables d'environnement => rechercher dans les variables système une entrée appelée TNS_ADMIN. TNS_ADMIN est ajouté pour modifier le chemin par défaut de l’entrée Tnsnames.ora . Ceci est utile lorsqu’il est utilisé dans un environnement réseau où une entrée générique tnsnames.ora peut être configurée pour tous les ordinateurs du réseau . Examinez le chemin par défaut de tnsnames.ora et ajoutez le chemin par défaut dans TNS_ADMIN.

3
Anto

@Warren et @DCookie ont couvert la solution, une chose à souligner est l'utilisation de tnsping. Vous pouvez vous en servir pour prouver que votre TNSNames est correct avant de tenter de vous connecter.

Une fois que vous avez correctement configuré les noms de réseau, vous pouvez utiliser ODBC ou essayer TOra , qui utilisera votre connexion Oracle native. TOra ou quelque chose de similaire (TOAD, SQL * Plus, etc.) s'avérera inestimable pour le débogage et l'amélioration de votre code SQL.

Enfin, lorsque vous vous connecterez éventuellement avec ASP.net, rappelez-vous que vous pouvez utiliser les bibliothèques de connexions de données Oracle. Voir Oracle.com pour une foule de ressources.

2
Mark Nold

S'il y a un espace au début du nom tns défini dans le fichier tnsnames.ora, certains des connecteurs tels que odbc peuvent générer cette erreur. Supprimez le caractère d'espacement au début.

1
Sertan

Cela n'a rien à voir avec un espace incorporé dans la structure de dossiers.

J'ai eu le même problème. Mais lorsque j'ai créé une variable d'environnement (définie à la fois au niveau du système et au niveau de l'utilisateur) appelée TNS_HOME et l'a fait pointer vers le dossier contenant TNSNAMES.ORA, le problème a été résolu. Voila!

venki

1
Venki

J'ai eu le même problème et la même erreur se présentait. Mon fichier TNSNAMES: ORA était également utile, mais il y avait apparemment un problème en raison du blocage par le pare-feu de l'accès. SO un bon conseil serait de s'assurer que le pare-feu ne bloque pas l'accès à la source de données. 

1
khizer jalal

J'ai aussi connu ce problème. J'ai découvert que le problème était dû au fait que la base de données Oracle n'aimait pas l'espace disponible dans C: les fichiers de programme (x86)\Toad ...... . Ça a marché.

1
Law

Arrhhh !! Je me suis retrouvé à nouveau !!!

Installez simplement ToadForOracle dans C:\ou n’importe quel répertoire sans parenthèse dans le chemin.


Dans mon cas, c’est parce que j’étais sur un PC x64 et que j’utilisais toujours l’ancien Oracle 9i avec les pilotes 32 bits!

J'utilise SQL Reporting Services avec une base de données Oracle. Le problème vient des crochets dans le chemin d'accès à Visual Studio (BIDS). Oracle n'aime pas les applications qui démarrent dans un chemin avec des crochets:

Problème de SGBD 10g XE avec une parenthèse dans le chemin

J'ai donc créé un fichier BAT pour ouvrir Visual Studio avec Progra ~ 2 comme nom de chemin court pour "Program Files (x86)".

Voici le contenu du fichier BAT:

rem Progra~2 is short path name for "Program Files (x86)" and works around an Oracle client bug that doesn't like the ()'s in the path
start /B "C:\Progra~2\Microsoft Visual Studio 9.0\Common7\IDE" "C:\Progra~2\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe"

Je nomme ce fichier BAT StartBIDS.BAT et le mets dans le répertoire: 

"C:\Program Files\Microsoft SQL Server\Start BIDS.bat"

Ensuite, je crée un raccourci vers le fichier BAT sur mon bureau, ainsi que dans mon menu Démarrer et modifie l'icône Raccourcis. Cela me permet d'ouvrir les applications TOAD, Visual Studio, BIDS et autres que j'utilise pour travailler avec Oracle.

Mettre à jour:

Sinon, faites une jonction: 

mklink /J "C:\Program Files (x86)\" "C:\Program Files x86\"

Puis supprimez les crochets dans le raccourci:

 enter image description here

1
Jeremy Thompson

Nous avons résolu nos problèmes en réinstallant le client de base de données Oracle. D'une manière ou d'une autre, l'installation n'a pas abouti sur l'un des postes de travail (même en l'absence de journalisation). Toutefois, lorsque vous comparez la taille/les fichiers/dossiers du répertoire Oracle à un poste de travail client, une quantité importante de fichiers manquait. Une fois que nous avons effectué une installation propre, tout a fonctionné parfaitement. 

0
Austin

Si vous avez un DSN 32 bits et un DSN 64 bits avec les mêmes noms, Windows choisira automatiquement le 64 bits et si votre application est 32 bits, cette erreur est indiquée. Faites juste attention à ça.

0
Muhamed Krlić

Dans mon cas, l'erreur est due au fait que j'ai 2 clients Oracle. C'est la solution:

Erreur Oracle ORA-12154 sur IIS local, mais pas avec Visual Studio Development Server

0

J'ai résolu ce problème en utilisant cette procédure. 

Tout d’abord, cette erreur s’est produite si vous n’avez pas installé le même répertoire ou le même lecteur. 

Mais la réponse est ici. 

  1. Connectez-vous à Windows en tant qu'administrateur.
  2. Allez au Panneau de configuration.
  3. Propriétés système et cliquez sur Enviroment
  4. Recherchez la variable du système d'exploitation et changez le nom en "TNS_ADMIN"

     enter image description here

  5. Et changez la valeur en "adresse de répertoire de tnsnames"  enter image description here

  6. Redémarrez le système. 

  7. Félicitations 
0
aemre

Je viens de passer une heure à ce sujet, je suis nouveau à Oracle donc je suis complètement confus .. 

la situation:

vient d'installer les outils de développement Oracle de Visual Studio 2012. Lorsque j'ai fait cela, j'ai perdu les éléments de ma liste déroulante qui contenaient mes entrées TNS dans TOAD. Je recevais cette erreur de Visual studio AND TOAD !! WTH! J'ai donc ajouté la variable d'environnement TNS_ADMIN sous "TOUS LES UTILISATEURS" avec le chemin d'accès à mon fichier .ora (que j'ai bien fonctionné car il fonctionnait jusqu'à ce que je le casse). Crapaud a pris ce changement. Encore Visual Studio ne me donnerait aucun amour ... recevant toujours la même erreur. ALORS, j’ai ajouté la variable environnementale À MES VARIABLES UTILISATEUR .. VIOLA !! 

ASSUREZ LES VARIABLES ENVIRONNEMENTALES AU SYSTÈME ET À L'UTILISATEUR

0
hanzolo

J'ai résolu ce problème en supprimant sqlnet.ora du chemin C:\Oracle\ora92\network\ADMIN 

  • Assurez-vous que le fichier TNSNAMES.ORA existe dans le bon répertoire
  • Assurez-vous que la variable d’environnement PATH a une entrée pour Oracle
  • Assurez-vous qu'il n'y a pas de problèmes de syntaxe dans TNSNAMES.ORA
  • Essayez de supprimer le fichier sqlnet.ora
0
Nalluswamy K

Heures de problèmes résolus. J'avais installé le cadre bêta Entity Framework pour Oracle et dans le projet Visual Studio 2010 MVC 3 que je référençais sous l'onglet .NET Oracle.DataAccess ... Cela me permettait de garder le "Oracle ORA-12154: TNS: Impossibilité de .. ." Erreur. Enfin, je viens de parcourir l’installation Oracle précédente sous c:\Oracle\product .... en utilisant l’ancienne version 10.2.0.100 de la dll. Enfin cela fonctionne maintenant. J'espère que ça aide quelqu'un d'autre.

0
Tom Stickel

Ne redémarrez que les services SID. Par exemple, votre SID nom = orcl, puis tous les services liés à orcl doivent être redémarrés, votre problème sera résolu

0
user2689022

J'ai eu ce problème à cause d'une faute de frappe dans le nom de fichier tnsnames.ora au lieu de tnsnames.ora

0
Ken

Cela a été mentionné dans un commentaire à une autre réponse, mais je voulais le changer pour une réponse réelle car c’était aussi le problème dans mon cas et je l’aurais voté si cela avait été une réponse.

Je suis sous Linux et le fichier tnsnames.ora n’est pas lisible par tout le monde. Après avoir rendu lisible la connexion via tns travaillée localement.

$ chmod +r tnsnames.ora
0
stantont

Nous avons également eu le même problème. Nous avons découvert que nous avions fourni plusieurs alias pour notre chaîne de connexion dans tnsnames.ora, comme suit:

svc01, svc02 = (DESCRIPTION = (ADRESSE = (PROTOCOL = TCP) (hôte = xxxx) (port = 50)) (CONNECT_DATA = (SERVEUR = DÉDIÉ) (nom_service = yyyysvc.world)))

ainsi, lors de la création d'une connexion à l'aide d'ODBC, lorsque nous avons sélectionné la valeur du nom du service TNS, le remplissage automatique indiquait «svc01» (veuillez noter la virgule supplémentaire). Dès que nous avons supprimé la virgule, elle a commencé à fonctionner pour nous.

0
JavaTec