Question

Je déploie récemment une application Web sur l'un de mes serveurs de développement. J'utilise oracle, asp.net et c #. Lorsque j'exécute l'application sur le serveur, tout fonctionne correctement, mais lorsque j'essaie d'exécuter l'application en dehors du serveur (à l'aide de mon ordinateur, par exemple), j'obtiens l'erreur suivante:

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

Si je lance l'application dans mon ordinateur avec Visual Studio, cela fonctionne bien.

Oracle est installé sur le serveur " A " et l'application est dans le serveur "B". Serveur " A " est dans un domaine et le serveur " B " est dans un autre domaine. Mon pc est dans le même domaine que le serveur "A".

Dans mon ordinateur, je peux trouver le fichier tnsname.ora dans C: \ oracle \ product \ 10.2.0 \ client_1 \ NETWORK \ ADMIN, mais dans le serveur "B". je ne le trouve nulle part

une idée? Merci pour l'aide.

Était-ce utile?

La solution

Devinez: un client Oracle n'est pas installé sur le serveur B.

Si un client oracle est installé, vous pouvez toujours placer un fichier tnsnames à n’importe quel emplacement (par exemple, un répertoire sur un partage réseau). Pour ce faire, définissez une variable système TNS_ADMIN (Propriétés système - > Options avancées - > Variables d’environnement sur XP) dans le répertoire contenant vos fichiers tnsnames.

Pour moi, par exemple, j'ai une variable système: TNS_ADMIN - C: \ oracle \ ora92 \ network \ ADMIN

Autres conseils

Avez-vous déjà essayé cela? (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 et 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 dénomination configurées. Par exemple, si le type d'identificateur de connexion utilisé est un nom de service réseau, il est impossible de trouver le nom de service réseau dans un référentiel de méthode de dénomination ou bien de localiser ou d'atteindre le référentiel.
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, se trouve dans le répertoire approprié et est accessible.

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

  • Assurez-vous que le fichier TNSNAMES.ORA ne contient aucune erreur de syntaxe. 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 & LD; 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 du service réseau ou de la base de données utilisé comme identifiant de connexion est configuré dans le répertoire.

  • 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 comme identifiant de connexion

  • Si vous utilisez l'attribution de nom facile à connecter:

  • 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 placer l'identificateur de connexion entre guillemets. Consultez le Guide de l'administrateur Oracle Net Services ou le guide spécifique du système d'exploitation Oracle pour plus d'informations sur l'attribution de noms.

La résolution des erreurs TNS peut être une véritable gêne. Quelques points à garder à l'esprit.

La plupart des environnements de développement (comme Visual Studio) conservent leur propre copie des informations de connexion TNS et n'utilisent pas le fichier TNSNAMES.ora. Le fichier dans lequel ces informations sont conservées ne doit pas nécessairement s'appeler TNSNAMES.ora, il ne s'agit que du nom par défaut. Peut-être la raison pour laquelle vous ne le trouvez pas sur le serveur B.

Si vous disposez du logiciel client Oracle (ou d'une base de données Oracle), vous pouvez utiliser tnsping pour vérifier si votre fichier TNSNAMES.ora est correctement configuré.

Les problèmes les plus fréquents avec la configuration d'un fichier TNSNAMES.ora sont l'utilisation du nom de service incorrect et / ou du nom d'hôte incorrect. Vous devrez peut-être modifier le " ODB_A " sur "ODB_A.WORLD". ou vice versa, en fonction des paramètres SQL NET. Pour Oracle 10, il s’agit du paramètre SQL NET par défaut. Pour ce dernier, vous devez utiliser ping pour voir le serveur "A", et savoir si vous devez utiliser "SERVERA". ou "SERVERA.DOMIN.COM" ou une adresse IP.

ORACLE_HOME est-il défini sur le serveur B?

Il semble que vous deviez installer Oracle Client sur " Serveur B " (le serveur d'applications) et configurez le fichier TNSNAMES.ORA. Cela est nécessaire car sinon, le code en cours n'aura aucune idée où chercher la base de données que vous utilisez dans l'application (vous avez probablement configuré une source de données dans web.config ou quelque chose de codé en dur). N'oubliez pas: vous ne pouvez pas accéder (facilement) à Oracle sans le client Oracle.

Avait le même problème. Il s'avère que le fichier TNSNAMES.ORA dans son environnement de déploiement avait un ADDRESS_NAME et un SID / SERVICE_NAME différents, et que l'application était configurée pour utiliser le SID, ce qui était à l'origine du problème.

Votre chaîne de connexion doit contenir le nom ADDRESS_NAME et pas le SID

Résolutions possibles -

Vérifiez que le fichier TNSNAMES.ORA existe et est accessible.

Assurez-vous qu'il n'y a pas d'erreur de syntaxe dans TNSNAMES.ORA.

Vérifiez que la chaîne de connexion est correcte.

Vérifiez s'il existe des problèmes DNS.

Si le problème survient lors de la connexion au serveur à l'aide du client.try de développeur SQL sql pour installer SQL Developer dans le fichier de programme au lieu de celui de Program Files (x86)

Ajouter l'environnement:

Variable Name: TNS_ADMIN

Variable Value: (YourDrive):\app\(UserName)\product\11.2.0\dbhome_1\NETWORK\ADMIN

J'avais affronté le même problème. Le code ci-dessous fonctionnait dans mon système mais ne fonctionnait pas sur un autre serveur même si j'avais ajouté une entrée tns dans le fichier tnsnames.ora.

con = new OracleConnection();
con.ConnectionString = "User Id=username;Password=password;Data Source=uit45";
con.Open(); // throws error here

Après avoir creusé et creusé, j’ai trouvé la solution à ce problème. Nous devons ignorer l'entrée dans le fichier tns et on peut lui attribuer l'entrée tns en tant que chaîne de connexion, ce qui a très bien fonctionné pour moi. Essayez le code ci-dessous.

con = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=db-uit45.xxx)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SID=uit45)));User Id=username;Password=password");
con.Open();

Notez que vous devez fournir les valeurs associées, en particulier pour HÔTE, PORT, SID, ID utilisateur et Mot de passe .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top