Question

Nous avons récemment modifié les bases de données physiques, les nouveaux serveurs, les nouveaux emplacements, le même schéma de base de données et les mêmes données. Depuis le changement, lorsque nous essayons de nous connecter directement à la base de données dans nos propres applications de bureau environ la moitié du temps, nous obtenons cette erreur. :

SQL*Loader-704: Internal error: ulconnect: OCIServerAttach[0]
ORA-12545: Connect failed because target host or object does not exist

Le reste du temps, il se connecte immédiatement sans aucun problème. Nos applications qui établissent des connexions via JDBC ne semblent pas poser de problème, mais nous le faisons lorsque nous effectuons une opération qui effectue une recherche tnsnames.ora (ou du moins, c'est mon intuition). TNSPING fonctionne à 100%, mais l’utilisation d’un exécutable Oracle tel que SQLLDDR échoue au moins 50% du temps. Voici un extrait de notre fichier TSNNAMES anonymisé et une sortie TNSPING:

DB_CONNECTION =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 1.2.3.4)(PORT = 1521))
  )
  (CONNECT_DATA =
    (SERVICE_NAME = MY.URL.COM)
  )
)

Et le TNSPING:

C:\>TNSPING DB_CONNECTION
TNS Ping Utility for 32-bit Windows: Version 9.2.0.1.0

Copyright (c) 1997 Oracle Corporation.  All rights reserved.

Used parameter files:
C:\oracle\ora92\network\admin\sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = 1.2.3.4)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = MY.URL.COM)))
OK (200 msec)

J'ai le SID de la base de données. C'est sur quoi reposent les connexions JDBC, mais l'ajouter à tnsnames.ora n'améliore pas les chances d'établir une connexion. Je ne connais pas suffisamment la manière dont le fichier tnsnames est utilisé par oracle pour résoudre intelligemment ce problème. Si vous avez des suggestions ou voyez quelque chose qui manque manifestement, faites-le-moi savoir.

EDIT: le nouveau DB peut être deux bases de données à charge équilibrée pouvant faire partie du problème.

Était-ce utile?

La solution

Nous avons récemment rencontré un problème similaire avec notre application. L’application se connectait parfois à Oracle RAC et parfois se plaignait avec ORA-12545. En bref, le problème était que le serveur avait un vrai nom alors que nous utilisions des adresses IP virtuelles dans TNSNAMES.ORA. Une fois que nous avons ajouté le mappage du nom du serveur à l'adresse IP via le fichier system32 \ drivers \ etc \ hosts, tout a commencé à fonctionner correctement.

J'ai écrit un peu plus sur mon blog < annonce sans vergogne > http: //dcarapic.blogspot.com/2009/04/intermittent-ora-12545-error.html < / annonce sans vergogne >

Autres conseils

Ah, faut aimer les problèmes intermittents :) (Dans la suite, j'ai dû remplacer le caractère de soulignement car je ne connais pas le caractère d'échappement pour ce langage wiki)

Utilisez-vous toujours le même utilisateur de système d’exploitation pour vous connecter et faire la tnsping?

Recherchez les variables d’environnement TNS [soulignement] ADMIN pointant vers différents emplacements tnsnames.ora. Effectuez une analyse du client pour rechercher le fichier tnsnames.ora en double; soit dans les emplacements désignés par $ TNS [underscore] ADMIN, soit dans différents HOMES $ ORACLE [underscore] (par exemple, si vous avez 2 installations client Oracle).

Vérifiez de même que vous utilisez les mêmes variables d’environnement $ ORACLE [underscore] HOME et $ PATH pour toutes les tentatives de connexion et toutes les tentatives de connexion. (Par exemple, toujours le même utilisateur OS ou chaque utilisateur a les mêmes valeurs)

Je vois que la sortie de tnsping rapporte la version 9.2, ce qui n’est pas vraisemblable, mais dans la version 11g, la base de données s’enregistre avec le programme d’écoute, ce qui peut prendre environ une minute. (peut-être aussi vrai avec 10g). Les tentatives de connexion antérieures à cette opération ne trouveront pas la cible.

Autre possibilité improbable: un service portant le même nom de service est-il toujours annoncé sur l'ancien serveur hôte? Supprimez-le si possible.

Après cela, je commencerais à regarder le réseau lui-même. Un ping du serveur est-il toujours réussi et rapide? Si vous utilisez le nom d'hôte plutôt que l'adresse IP dans le fichier tnsnames.ora, le nom d'hôte se résout de manière fiable en IP correcte (nslookup). Existe-t-il un pare-feu local et, le cas échéant, se comporte-t-il?

Cordialement Karl

Si vous utilisez Oracle 10g, vous pouvez utiliser un gestionnaire Easy Connect à la place:

//servername/instancename

,

//1.2.3.4/my.url.com

dans votre cas.

Il est à l'abri de beaucoup de TNSNAMES problèmes.

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