web-dev-qa-db-fra.com

ORA-12154 n'a pas pu résoudre l'identifiant de connexion spécifié

J'ai basculé sur Windows 7 64 bits et créé une application Web simple pour tester la connexion à la base de données. J'utilise VS 2010 - projet Web simple asp.net et je lance l'application à partir de VS. 

J'obtiens cette erreur: "ORA-12154 n'a pas pu résoudre l'identifiant de connexion spécifié"

J'ai également un exemple d'application de console qui teste la connexion à la base de données, et cela fonctionne bien.

Après y avoir googlé, j'ai constaté que beaucoup de publications en ligne faisaient référence à des autorisations. J'ai donc défini mes autorisations C:/Oracle pour lire/écrire/exécuter pour mon compte ASP.net, NETWORK SERVICE, NOM DE L'ORDINATEUR. Cela ne résoud toujours pas le problème. J'ai vérifié que mon application Web s'exécute sous mon compte domain\username et que ce compte détient les droits de lecture/écriture/exécution sur le dossier C:\Oracle. 

J'ai même réinstallé mon VS pour m'assurer qu'il se trouve dans C:\Program Files plutôt que C:\Program Files (x86)

Des idées pour lesquelles mon application Web ne voit pas la chaîne de connexion? (alors que l'application console le fait) Je ne sais pas ce que je peux faire d'autre.

15
sarsnake

Je suppose que vous utilisez le fichier tnsnames.ora pour spécifier vos services de base de données disponibles. Si tel est le cas, les erreurs de connexion se résument généralement à deux choses.

  1. L'application ne trouve pas l'entrée TNS que vous avez spécifiée dans la chaîne de connexion.

  2. L'entrée TNS a été trouvée, mais l'adresse IP ou l'hôte n'est pas correcte dans le fichier tnsnames.ora.

Pour développer le numéro 1 (que je pense est votre problème). Lorsque vous dites à Oracle de se connecter en utilisant quelque chose comme:

sqlplus user/pass@service

Le service est défini dans le fichier tnsnames.ora. Si je tente de me connecter à un service qui n'est pas défini dans mon tnsnames.ora, j'obtiens le message d'erreur suivant:

[sodonnel @ home ~] $ sqlplus sodonnel/sodonnel @ nulle part

SQL*Plus: Release 11.2.0.1.0 Production on Mon Oct 31 21:42:15 2011

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified

Donc, vous devez vérifier certaines choses:

  1. Existe-t-il un fichier tnsnames.ora - Je pense que oui car votre console peut se connecter
  2. Y at-il une entrée dans le fichier pour le service - je pense aussi oui car la console se connecte
  3. Est-ce que l'application peut trouver le tnsnames.ora?

Votre problème pourrait bien être le numéro 3: l'application est-elle exécutée sous un utilisateur différent de celui utilisé lors de l'exécution de la console? 

Oracle recherche le fichier tnsnames.ora dans le répertoire défini dans la variable d’environnement TNS_ADMIN - Si vous utilisez plusieurs utilisateurs, la variable d’environnement TNS_ADMIN n’est peut-être pas définie et ne peut donc pas trouver le fichier?

15
Stephen ODonnell

Il peut y avoir tant de problèmes, mais si vous utilisez Oracle 10g, désinstallez Oracle 10g, supprimez également la valeur du registre et installez Oracle 11g. Mais si vous utilisez Oracle 11g, commencez par vérifier l'état du registre si celui-ci est bien orienté. Parfois, il peut y avoir plus d'une maison parce que vous installez SQL Developer encore et encore. Dans ce cas, vous pouvez supprimer la valeur inutile du registre de votre maison ou ajouter des fichiers tns et sql.net à tous ces éléments, ce qui pourrait résoudre le problème. J'ai résolu le mien de cette façon. 

4
Chandra Malla

J'ai eu le même problème. Dans mon cas, j'utilisais un service Web créé à l'aide des paramètres AnyCPU. Comme la WCF utilisait des composants d’accès aux données Oracle 32 bits, elle soulevait donc la même erreur lorsque j’ai essayé de l’appeler à partir d’un client de la console. Ainsi, lorsque j'ai compilé le service WCF à l'aide du paramètre x86, le client a pu obtenir des données du service Web.

Si vous compilez en tant que "Tout processeur" et que vous exécutez sur une plate-forme x64, vous ne pourrez pas charger de dll 32 bits (dans notre cas, il s'agirait des composants Oracle Data Access), car notre application n'a pas démarré dans WOW64. (Windows32 sur Windows 64). Donc, afin de permettre la dépendance à 32 bits des composants Oracle Data Access, je compile le service Web avec Platform cible de x86 et le résout pour moi.

En guise d'alternative, si vous avez des pilotes ODAC 64 bits installés sur la machine qui ont également provoqué la résolution du problème.

3
Asif

En cas de problème similaire, seule mon application Web fonctionnait correctement et SQLPlus me posait des problèmes de connexion, ainsi que l'erreur ORA-12154 could not resolve the connect identifier specified. J'avais 11g et 12 clients Oracle installés. Mes variables d'environnement ont toutes été définies pour pointer sur mon instance 12:

  • Oracle_HOME = C:\Oracle\product\12
  • PATH = C:\Oracle\product\12\bin;....
  • TNS_ADMIN = C:\Oracle\product\12\network\admin

Une entrée de registre est également requise à l'adresse HKLM\Software\Oracle\KEY_OraClient12Home1, une entrée chaîne de TNS_ADMIN avec le même chemin que la variable d'environnement.

J'ai un tnsnames.ora à la fois C:\Oracle\product\11\network\admin et C:\Oracle\product\12\network\admin. Autant que je sache, mon application Web et le 12 client SQLPlus que j'utilisais auraient dû utiliser toutes les variables de version 12.

Mes étapes de dépannage:

  • Modifiez toutes les variables d'environnement ci-dessus de 12 à 11.
  • Connectez-vous avec le SQLPlus de 11g (travaillé!)
  • Modifiez toutes les variables d'environnement ci-dessus de 11 à 12.
  • Connectez-vous à nouveau avec SQLPlus 12 (travaillé!)

Donc, je ne sais pas vraiment ce qui a amené SQLPlus de 12 à cesser de se connecter, mais ce type de réinitialisation peut fonctionner pour quelqu'un, alors j'ai pensé le documenter ici.

1
vapcguy

Si vous utilisez LDAP, assurez-vous que la variable d'environnement "TNS_ADMIN" existe et pointe vers le dossier contenant le fichier "ldap.ora".

Si cette variable n'existe pas, créez-la et redémarrez Visual Studio.

1
Sylvain Rodrigue

S'il vous plaît laissez-moi répéter ce que Stephen a dit depuis que j'ai raté moi-même la première fois. La variable d'environnement TNS_ADMIN et Oracle_HOME sont définis sur C:\instantclient_11_2 et le fichier th tnsnames.ora est présent. Trouvé la réponse sur ce lien .

1
Bill Thayer

J'ai une application Web Entity Framework qui fonctionne sur mon ordinateur local, mais cette erreur apparaît lorsque vous êtes déplacé vers un autre environnement. Il existe d'autres applications non-Entity Framework qui fonctionnent et je peux me connecter à sqlplus. 

Utilisation de sysinternals Process Monitor indique que le fichier de noms tns n'est pas chargé correctement: 

tnsnames.ora status NAME NOT FOUND

Après la documentation , j'ai essayé d'ajouter une section donnant l'emplacement du fichier tnsnames comme suit: 

<configuration>

  <configSections>
    <section name="Oracle.manageddataaccess.client"
      type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
  </configSections>

  <Oracle.manageddataaccess.client>
    <version number="*">
      <settings>
        <setting name="TNS_ADMIN" value="C:\Oracle\product\12.1.0\client_1\Network\Admin"/>
      </settings>
    </version>
  </Oracle.manageddataaccess.client>

<configuration>

Cependant, cela a entraîné une erreur immédiate du serveur 500. 

Une enquête plus poussée a montré que la dll que je compilais avec l'application Web était la version 4.122.1.0, tandis que l'environnement client Oracle installé sur la machine était 4.121.2.0. Comme expliqué dans la documentation du package Oracle EntityFramework

Remarque: Si votre application est une application Web et que l'entrée ci-dessus a été ajoutée à un fichier web.config, le même gestionnaire de section de configuration pour "Oracle.manageddataaccess.client" existe également dans le fichier machine.config, mais les valeurs de l'attribut "Version" sont différentes. un message d'erreur du type "Une section 'Oracle.manageddataaccess.client' en double est définie." peut être observé au moment de l'exécution. Si tel est le cas, l'entrée du gestionnaire de section de configuration dans le fichier machine.config pour "Oracle.manageddataaccess.client" doit être supprimée du fichier machine.config pour que l'application Web ne rencontre pas cette erreur. Mais étant donné qu'il peut y avoir d'autres applications sur la machine dépendant de cette entrée dans le fichier machine.config, cette entrée du gestionnaire de section de configuration peut devoir être déplacée vers tout le fichier de configuration .NET de l'application sur cette machine qui en dépend. 

J'ai tenté d'ajouter une section de version distincte dans le fichier machine.config .NET sans succès (il existait une section pour la version 4.121.2.0 et une section pour la version 4.122.1.0). Après avoir supprimé la section "Oracle.manageddataaccess.client" du fichier machine.config, l'ajout ci-dessus au fichier web.config a résolu le problème ORA-12154. 

Résumé de la solution n ° 1:

  1. Supprimer "Oracle.manageddataaccess.client" de .NET machine.config 
  2. Définissez le paramètre de configuration TNS_ADMIN dans web.config comme ci-dessus.

Solution 2

En recherchant ce problème, j'ai constaté que la variable d'environnement TNS_ADMIN n'était pas définie. J'ai créé une nouvelle variable d'environnement appelée TNS_ADMIN et ai défini la valeur sur "C:\Oracle\product\12.1.0\client_1\Réseau\Admin". J'ai supprimé les modifications de web.config et la section "Oracle.manageddataaccess.client" de .NET machine.config, mais j'ai quand même reçu ORA-12154. Ce n’est qu’après avoir redémarré la machine que cela a résolu le problème. 

Résumé de la solution n ° 2:

  1. Créez une nouvelle variable d'environnement appelée TNS_ADMIN et définissez la valeur sur "C:\Oracle\product\12.1.0\client_1\Réseau\Admin". 
  2. Redémarrer la machine 

Solution 3

J'ai ajouté une entrée pour la version correcte dans le registre et cela a résolu le problème:

HKLM\Software\Wow6432Node\Oracle\ODP.NET.Managed\4.121.2.0  

Le nom de la clé est TNS_ADMIN et cela pointe vers le dossier contenant le fichier tnsnames: 

C:\Oracle\product\12.1.0\client_1\network 

Pas le dossier C:\Oracle\product\12.1.0\client_1\network\admin.

1
BurnsBA

Cette erreur (ainsi que ORA-6413: Connexion non ouverte) peut également être provoquée par des parenthèses dans le chemin de l'exécutable de l'application et par un bogue dans les bibliothèques clientes Oracle 10.2.0.1 ou inférieures. 

Vous devez soit mettre à niveau votre bibliothèque client Oracle, soit modifier le chemin de l'exécutable.

Plus de détails voir:

0
canahari

C'est une vieille question, mais les derniers installateurs d'Oracle ne sont pas une amélioration, alors je me suis récemment retrouvé dans ce marais, me débattant pendant plusieurs jours ...

Mon scénario était SQL Server 2016 RTM. Oracle 12c Open Client + ODAC 32 bits fonctionnait bien pour Visual Studio Report Designer et Integration Services Designer, ainsi que pour les packages SSIS exécutés via SQL Server Agent (avec option 32 bits). La version 64 bits fonctionnait correctement pour Report Portal lors de la définition et du test d'une source de données, mais l'exécution des rapports renvoyait toujours l'erreur redoutée "ORA-12154".

Ma dernière solution a été de passer à une chaîne de connexion EZCONNECT, ce qui évite totalement le désordre TNSNAMES. Voici un lien vers une description détaillée, mais c'est en gros juste: Host: port/sid

http://www.oracledistilled.com/Oracle-database/Oracle-net/using-easy-connect-ezconnect-naming-method-to-connect-to-Oracle-databases/

Au cas où cela aiderait quelqu'un à l'avenir (ou que je reste bloqué là-dessus), voici les étapes de mon installation d'Oracle (l'horreur complète):

Installer les pilotes Oracle: Client Oracle 12c (32 bits) plus ODAC. 

une. Téléchargez et décompressez les fichiers suivants à partir de http://www.Oracle.com/technetwork/database/enterprise-edition/downloads/database12c-win64-download-2297732.html et http://www.Oracle .com/technetwork/database/windows/downloads/utilsoft-087491.html ):

je. winnt_12102_client32.Zip

ii. ODAC112040Xcopy_32bit.Zip

b. Exécutez winnt_12102_client32\client32\setup.exe. Pour le type d'installation, choisissez Admin. Pour l'emplacement d'installation, entrez C:\Oracle\Oracle12. Acceptez les autres valeurs par défaut.

c. Lancez une invite de commande “En tant qu'administrateur” et modifiez le répertoire (cd) dans votre dossier ODAC112040Xcopy_32bit. 

ré. Entrez la commande suivante: install.bat all C:\Oracle\Oracle12 odac 

e. Copiez le fichier tnsnames.ora d’une autre machine dans ces dossiers: *

je. C:\Oracle\Oracle12\network\admin *

ii. C:\Oracle\Oracle12\product\12.1.0\client_1\network\admin *

Installer le client Oracle 12c (x64) plus ODAC

une. Téléchargez et décompressez les fichiers suivants à partir de http://www.Oracle.com/technetwork/database/enterprise-edition/downloads/database12c-win64-download-2297732.html et http://www.Oracle .com/technetwork/database/windows/downloads/index-090165.html ):

je. winx64_12102_client.Zip

ii. ODAC121024Xcopy_x64.Zip

b. Exécutez winx64_12102_client\client\setup.exe. Pour le type d'installation, choisissez Admin. Pour l'emplacement d'installation, entrez C:\Oracle\Oracle12_x64. Acceptez les autres valeurs par défaut.

c. Démarrez une invite de commande “En tant qu'administrateur” et modifiez le répertoire (cd) dans le dossier C:\Software\Oracle Client\ODAC121024Xcopy_x64. 

ré. Entrez la commande suivante: install.bat all C:\Oracle\Oracle12_x64 odac

e. Copiez le fichier tnsnames.ora d’une autre machine dans ces dossiers: *

je. C:\Oracle\Oracle12_x64\network\admin *

ii. C:\Oracle\Oracle12_x64\product\12.1.0\client_1\network\admin *

* Si vous utilisez la méthode EZCONNECT, ces étapes ne sont pas obligatoires.

Les installations ODAC sont délicates et obscures - grâce à Dan English qui m'a donné la méthode (détaillée ci-dessus) pour cela. 

0
Mike Honey

Utilisez ce lien . Sur le support Microsoft 

J'ai donné la permission à l'utilisateur IUSR_MachineName sur le dossier racine Oracle et j'ai pu résoudre le problème

0
SharpCoder

utilisez le moniteur de processus et recherchez le journal sans nom pour le fichier tnsnames.ora. 

vérifiez vos variables d'environnement. s'il n'est pas valide, désinstallez tous les clients Oracle et réinstallez-le.

0
user572730

J'ai eu cette erreur dans Visual Studio 2013, avec un projet SSIS. J'ai défini Projet, Propriétés, Débogage, Run64BitRuntime = false puis le package SSIS a été exécuté. Toutefois, lorsque j'ai déployé le package sur le serveur, je devais définir la valeur sur true (le serveur est Windows 2012/SQL 2014 64 bits).

Je pense que le raisonnement derrière cela est que Visual Studio est une application 32 bits.

0
Fordy

Un autre type d'erreur odieuse que j'ai rencontré dans Oracle 11: des entrées dans tnsnames.ora qui ne commencent pas par la première colonne de la ligne ("XXX = (...)" au lieu de "XXX = (...)" ) et sont analysés avec l'entrée précédente, ce qui la rend malformée.

Comme pour les fichiers tnsnames.ora remplacés ou égarés, ce type de problème est facile à diagnostiquer avec l'utilitaire de ligne de commande tnsping: vous lui transmettez le nom d'une entrée tnsnames.ora et donne le texte complet de sa définition. 

0
Lorenzo Gatti