2010-08-13 6 views
8

J'essaie de me connecter à un oracle db à partir d'une application ASP classique, mais je continue à courir dans l'erreur ORA-12154.Oracle (0x80004005) ORA-12154: TNS: impossible de résoudre l'identifiant de connexion

  1. TNSNAMES.ORA est correctement configuré

    DBSOURCE.ABcom = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = CDBcom) (PORT = 1231)) ) (CONNECT_DATA = (SERVICE_NAME = DBSOURCE) ) )

  2. Je tnsping

    C: \ Documents and Settings \ USERID.A> tnsping DBSOURCE

    TNS Ping Utility pour Windows 32 bits: Version 10.2.0.4.0 - Production le 09-MAR-2 011 09:12:31

    Copyright (c) 1997, 2007, Oracle. Tous les droits sont réservés.

    fichiers de paramètres utilisés: C: \ oracle \ product \ 10.2.0 \ client_1 \ RESEAU \ ADMIN \ sqlnet.ora

    Utilisé adaptateur TNSNAMES pour résoudre l'alias La tentative de contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = CDBcom) (PORT = 1231))) (CONNECT_DATA = (SERVIC E_NAME = DBSOURCE))) OK (30 msec)

  3. Je peux créer un ODBC connexion et j'ai testé la connexion qui est réussie.

  4. Je peux me connecter à l'oracle db via crapaud.
  5. J'ai vérifié mon dossier sqlnet.ora

    NAMES.DEFAULT_DOMAIN = Abcom

    SQLNET.AUTHENTICATION_SERVICES = (NONE)

    NAMES.DIRECTORY_PATH = (TNSNAMES, EZConnect)

  6. J'ai également vérifié que TNSNAMES.ORA était l'un de mes chemins d'accès système.

  7. Je peux me connecter à la DB avec SQLPLUS

Voici le code qui jette l'erreur

dim CnnStr 

Set Cnn = Server.CreateObject("ADODB.Connection") 

CnnStr="Provider=MSDAORA.1;Password=pass;User ID=user;Data Source=DBSOURCE" 

Cnn.Open CnnStr 

Je suis sous Windows XP Pro SP3 32 bits

J'ai testé cela sur une machine de collègues et l'application ASP n'a pas de problèmes, suis-je manquant une configuration quelque part ou ai-je gâcher ma config?

Merci pour l'aide à tous!

Répondre

4

Il semble que tous les paramètres ont été vérifiés, mais voici mes suggestions pour des tirs de difficulté:

  • Qu'en est-il des restrictions sur le compte IIS est en cours d'exécution sous? A-t-il les permissions de fichier pour lire le TNSNAMES? Avez-vous essayé de donner plus de droits à l'utilisateur? Même exécuter IIS avec Local As System Account? Rappelez-vous de le remettre comme il était.
  • Vous êtes sûr qu'il n'existe pas d'application tierce telle qu'un antivirus ou un pare-feu qui pourrait influencer/bloquer l'accès. (Désactiver les tester mais ne pas oublier de réactiver :)

(Qu'est-ce que vous avez enfin faire pour le résoudre?)

+0

Merci beaucoup! Après avoir inclus le USERID \ USERS dans mon groupe ou les noms d'utilisateur pour la permission dans le fichier TNSNAMES.ORA cela a fonctionné! – ChickSentMeHighE

+0

A travaillé comme un charme. douleur grave dans le $$. – temarsden

2

"ceci fonctionne sur une machine de collègue mais pas le mien."

ORA-12154 est généralement un problème de configuration, et il semble que ce soit le cas dans votre cas. La réponse courte est de comparer votre machine avec celle de votre collègue et de comprendre quelle est la différence.

choses à vérifier comprennent:

  • le fichier TNANAMES.ORA
  • le fichier SQLNET.ORA
  • le fichier LISTENER.ORA (si vous utilisez une base de données locale)
+0

des thats l'origine ce que je bien aussi, mais après avoir copié le TNSNAMES.ORA et SQLNET.ora de mon collègue (dont les travaux de connexion) il ne résout toujours pas le problème – ChickSentMeHighE

+0

La chose étrange est là, il est capable de cingler la base de données via tnsping. Créer une connexion ODBC et la tester à partir de l'interface ODBC fonctionne correctement. La connexion via sqlplus fonctionne également ... – Mike

+0

Pourrait-il y avoir un service qui doit être redémarré pour détecter un changement de paramètre de registre ou TNSNAMES.ORA modifié? Peut-être essayer de contourner TNSNAMES.ORA en spécifiant directement un hôte: port: service –

0

Essayez de définir la valeur de la variable d'environnement TNS_ADMIN sur la machine avec le problème/network/admin (ou l'emplacement de votre fichier tnsnames.ora) et voyez si cela vous aide.

+0

Merci de répondre, mais il n'a pas résolu le problème :( – ChickSentMeHighE

1

Si vous exécutez un système d'exploitation 64 bits et oracle 10, essayez d'installer tous les correctifs pour oracle. Quelque chose de similaire m'est arrivé, SQL plus et tout le reste a fonctionné, sauf mon programme .NET. J'utilisais un programme .Net dans le dossier "Program files (x86)". L'installation de correctifs l'a corrigé.

+0

Pouvez-vous s'il vous plaît dites-moi quel correctif nous devons installer, ce serait génial si vous peut partager le lien Merci! – SharpCoder

2

Avez-vous plusieurs maisons Oracle? Vérifiez que IIS ne pointe pas vers l'autre ORA_HOME (et par conséquent ne trouve pas votre entrée tnsnames.ora). Je ne suis pas très familier avec la configuration IIS, donc je testerais cela en ajoutant l'entrée TNS à tous les tnsnames.ora sur mon PC.

1

Le problème probable est l'absence d'autorisation de lecture sur les répertoires Oracle par l'utilisateur IIS est en cours d'exécution en tant que. Comme le dit @Derick, temporairement définir les autorisations grand ouvert sur le répertoire $ ORACLE_HOME (Everyone = Full Control), redémarrer IIS, et tester. Lorsque cela fonctionne, donnez l'autorisation de lecture à l'utilisateur IIS sur ce répertoire.

Vous pouvez également confirmer ce problème en utilisant Process Monitor from Microsoft SysInternals et en voyant le message d'échec lors de l'appel de l'API CreateFile (...) pour ouvrir les DLL ou lire le fichier TNSNAMES.ORA. Étant donné le fonctionnement des fichiers temporaires lors de la sélection via les curseurs, il se peut que vous deviez accorder à l'utilisateur IIS des autorisations d'écriture dans certains répertoires.

0

J'ai rencontré le même problème et trouvé une solution simple. Vous n'avez pas besoin de modifier les fichiers de configuration.Espérons que cela peut vous aider:

CREATE DATABASE LINK server2_db 
    CONNECT TO dbuser IDENTIFIED BY pwd USING 
'(DESCRIPTION = 
    (ADDRESS_LIST = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = server_2)(PORT = port_num)) 
    ) 
    (CONNECT_DATA = 
    (SERVICE_NAME = server2_db) 
    ) 
)'; 

La solution est d'ici: http://oraclequirks.blogspot.com/2008/11/ora-12154-tnscould-not-resolve-service.html

Questions connexes