2010-10-27 3 views
3

J'essaie actuellement de me connecter à une base de données Oracle. Je peux me connecter correctement sur ma machine de développement, mais lorsque je déploie sur mon serveur Win2k3 sp2, j'obtiens l'erreur suivante.ODP .NET TNS: pas d'écouteur

Faile pour ouvrir la connexion ... Oracle.DataAccess.Client.OracleException ORA-12541: TNS: pas liestener à Oracle.DataAccess.Client.OracleException.HandleErrorHelper (Int32 errCode, OracleConnection Conn, IntPtr opsErrCtx, OpoSqlValCtx * pOpoSqlValCtx, Object scr, procédure de chaîne, bCheck bCheck)

Des idées, des idées, des instructions seraient utiles. J'utilise Oracle.DataAccess.dll version 4.112.1.2.

Merci

+0

Pas exactement clair sur votre configuration ici. Vous avez une base de données Oracle sur le système X. Votre machine de développement peut se connecter à X, mais votre nouveau serveur W2K3 ne peut pas se connecter à X? – DCookie

+0

Vous avez raison sur la configuration. Mon problème était qu'il n'y avait pas une connexion ouverte entre le système X et mon nouveau serveur W2K3. – jreddy

Répondre

3

Le véritable problème était un pare-feu.

Apparemment, ma machine de développement local avait accès au serveur hébergeant Oracle, mais pas mon serveur de développement. Une fois qu'il y avait une connexion ouverte entre les deux serveurs, l'erreur TNS: no listener a disparu.

Cela semble avoir été un faux message d'erreur renvoyé par le client Oracle. L'écouteur était là et ma configuration (chaîne de connexion) était valide, mais il n'y avait pas de connexion disponible quoi que ce soit entre les deux machines.

+0

Merci d'être revenu pour terminer l'histoire. –

0

Il semblerait que la machine de votre entrée TNSNAMES montre du doigt ne dispose pas d'un auditeur en cours d'exécution. Trois options différentes que j'ai pu voir ... (1) l'entrée pointe sur des machines différentes dans tnsnames.ora (différente sur les deux machines), (2) la résolution DNS est différente entre ces deux machines, ou (3) l'auditeur est écouter sur un port différent s'il y en a un qui fonctionne sur la machine.

0

J'ai aussi appris autre chose. le fichier TNSNAMES.ora, dans le dossier Network \ admin cannon, comporte des espaces au début des instances.

exemple:

MYORACLESERVER = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
     (ADDRESS = (PROTOCOL = tcp)(HOST = myoracleserver.mydomain.com)(PORT = 1525)) 
    ) 
    (CONNECT_DATA = 
     (SID = MYORACLESERVER) 
    ) 
) 
2

J'ai eu exactement le même problème. Pour une raison quelconque, il semble que l'utilisation de l'alias ne fonctionnait pas.

Mon fichier tnsnames.ora avait quelque chose comme ceci:

oracle = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
     (ADDRESS = (PROTOCOL = tcp)(HOST = myoracleserver.mydomain.com)(PORT = 1525)) 
    ) 
    (CONNECT_DATA = 
     (SID = MYORACLESERVER) 
    ) 
) 

J'ai alors changé ma chaîne de connexion Data Source de (en utilisant l'alias):

User Id=scott;Password=tiger;Data Source=oracle 

Pour (ne pas utiliser l'alias):

User Id=scott;Password=tiger;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=myoracleserver.mydomain.com)(PORT=1525)))CONNECT_DATA = (SID = MYORACLESERVER))) 

Tout fonctionne parfaitement avec ODP.NET maintenant. Il fonctionnait et fonctionne toujours avec l'alias lorsque j'utilise une ancienne connexion ADODB.

MISE À JOUR:

ODP.NET ne peut pas lire votre fichier tnsnames.oradirectement de votre application. Vous devez modifier comme je l'ai dit dans ma réponse ou vous pouvez également spécifier où votre fichier tnsnames.ora est dans votre fichier Web.Config ou App.Config.

Voir my other answer pour plus de détails sur toutes les options dont vous disposez.

+0

Si le fait de placer exactement la même entrée TNS dans la chaîne de connexion résout votre problème, cela signifie que vous n'étiez pas en train de récupérer les tnsnames.ora que vous pensiez être. Recherchez-en plusieurs copies et vérifiez également les entrées TNS_ADMIN dans votre environnement, machine.config, web.config/app.config. –

+0

J'ai 'Data Source = oracle' dans un fichier Excel avec ADODB: fonctionne très bien. J'ai une application de console avec ADO.NET, cela fonctionne en utilisant la méthode décrite dans ma réponse. Le fichier Excel fonctionne toujours. Je suis confus quant à "où devrais-je regarder?" Je viens de retester sur 2 ordinateurs différents ... même résultat. – Maxime

+0

Recherchez sur votre machine des copies multiples de tnsnames.ora. Renommez tout sauf celui que vous voulez tester. Vérifiez également les entrées TNS_ADMIN dans votre environnement, machine.config, web.config/app.config. Le fait est que TNSNAMES.ORA peut être trouvé de plusieurs façons lors de l'utilisation de ODP.NET et qu'il est différent de celui utilisé avec ADODB. Vous pourriez en choisir un qui n'est pas celui que vous pensiez utiliser. –

Questions connexes