2009-01-14 10 views
2

Nous avons récemment modifié les bases de données physiques, les nouveaux serveurs, les nouveaux emplacements, les mêmes schémas et données de base de données et depuis le changement, chaque fois que nous essayons de nous connecter directement à la base de données. environ la moitié du temps nous obtenons cette erreur:Connexion Hinky Oracle (Aide TNSNAMES.ora)

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 tout de suite sans aucun problème. Nos applications qui établissent des connexions via JDBC ne semblent pas avoir de problèmes mais nous le faisons quand nous passons par quelque chose qui fait une recherche sur tnsnames.ora (ou c'est mon intuition au moins). TNSPING fonctionne à 100% mais l'utilisation d'un exécutable Oracle comme SQLLDDR échoue au moins 50% du temps. Voici un snppet anonymisées de notre fichier TSNNAMES 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) 

Je le SID du DB, qui est ce que les connexions JDBC compter que sur ajouter au tnsnames.ora n'améliore pas les chances de faire une connexion. Je ne sais pas assez comment le fichier tnsnames est utilisé par Oracle pour résoudre intelligemment ce problème, donc si vous avez des suggestions ou si vous voyez quelque chose qui manque, merci de me le faire savoir.

EDIT: Les nouveaux DB peuvent être deux bases de données à charge équilibrée qui peuvent faire partie du problème.

Répondre

1

Nous avons eu récemment un problème similaire avec notre application. L'application se connectait parfois à l'Oracle RAC et parfois il se plaignait de 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 dans mon blog < l'annonce sans vergogne > http://dcarapic.blogspot.com/2009/04/intermittent-ora-12545-error.html </de l'annonce sans vergogne >

+0

L'article que vous avez lié à vous dans votre blog (http://tardate.blogspot.com/2007/06/check-locallistener-if-you-run-rac.html) était excellent. C'est génial de comprendre enfin pourquoi cela se passait et comment le réparer –

0

Ah, dois aimer les problèmes intermittents :) (Dans ce qui suit, j'ai dû remplacer le caractère underscore que je ne connais pas le char évasion pour cette langue wiki)

Utilisez-vous toujours le même OS utilisateur à se connecter et à faire le tnsping?

Vérification des variables d'environnement TNS [soulignement] ADMIN pointant vers des emplacements tnsnames.ora différents. Effectuer une analyse du client pour les tnsnames.ora en double; soit dans des emplacements pointés par $ TNS [underscore] ADMIN ou dans des HOMES $ ORACLE [underscore] différents (par exemple si vous avez 2 installations client Oracle).

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

Je vois que la sortie tnsping signale la version 9.2 donc ce n'est pas probable, mais dans 11g la DB enregistre avec l'auditeur ce qui peut prendre une minute ou deux . (peut-être aussi vrai avec 10g). Les tentatives de connexion antérieures ne trouvent 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? Retirez-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-il de manière fiable à l'adresse IP correcte (nslookup). Y a-t-il un pare-feu local et si c'est le cas?

Cordialement Karl

+0

L'URL SERVICE_NAME (MY.DOMAIN.COM) ne se résout pas à une URL valide par DNS (c'est-à-dire qu'elle ne peut pas être PING'd ou trouvée par NSLOOKUP). – 18Rabbit

0

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 immunisé à lots de TNSNAMES questions.

Questions connexes