Pregunta

Recientemente cambiamos las bases de datos físicas, los nuevos servidores, las nuevas ubicaciones, el mismo esquema de base de datos y los mismos datos, y desde el cambio, cada vez que intentamos conectarnos directamente a la base de datos en nuestras propias aplicaciones de escritorio, aproximadamente la mitad del tiempo recibimos este error :

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

El resto del tiempo, se conecta de inmediato sin ningún problema. Nuestras aplicaciones que establecen conexiones a través de JDBC no parecen tener ningún problema, pero lo hacemos cuando pasamos por algo que hace una búsqueda de tnsnames.ora (o al menos esa es mi corazonada). TNSPING funciona al 100%, pero el uso de un ejecutable Oracle como SQLLDDR falla al menos el 50% del tiempo. Aquí hay un fragmento anónimo de nuestro archivo TSNNAMES y una salida TNSPING:

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

Y el 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)

Tengo el SID de la base de datos, que es de lo que dependen las conexiones JDBC, pero agregarlo a tnsnames.ora no mejora las probabilidades de hacer una conexión. No sé lo suficiente sobre cómo Oracle está utilizando el archivo tnsnames para resolver este problema de manera inteligente, por lo que si tiene sugerencias o ve algo que obviamente falta, hágamelo saber.

EDITAR: Los nuevos DB pueden ser dos bases de datos con equilibrio de carga que pueden ser parte del problema.

¿Fue útil?

Solución

Recientemente tuvimos un problema similar con nuestra aplicación. La aplicación a veces se conectaba al Oracle RAC y a veces se quejaba con ORA-12545. En resumen, el problema era que el servidor tenía un nombre real mientras estábamos usando direcciones IP virtuales en TNSNAMES.ORA. Una vez que agregamos la asignación del nombre del servidor a la dirección IP a través del archivo system32 \ drivers \ etc \ hosts, todo comenzó a funcionar correctamente.

He escrito un poco más en mi blog < anuncio descarado > http: //dcarapic.blogspot.com/2009/04/intermittent-ora-12545-error.html < / shameless advert >

Otros consejos

Ah, tengo que amar los problemas intermitentes :) (A continuación, tuve que reemplazar el carácter de subrayado, ya que no conozco el carácter de escape para este idioma wiki)

¿Siempre está utilizando el mismo usuario del sistema operativo para conectarse y realizar el tnsping?

Verifique las variables de entorno TNS [guión bajo] ADMIN que apunta a diferentes ubicaciones de tnsnames.ora. Haga un escaneo del cliente en busca de tnsnames.ora duplicados; ya sea en ubicaciones señaladas por $ TNS [subrayado] ADMIN o en diferentes HOGARES $ ORACLE [subrayado] (por ejemplo, si tiene 2 instalaciones de cliente Oracle).

Asimismo, compruebe que está utilizando las mismas variables de entorno $ ORACLE [guión bajo] HOME y $ PATH para todos los intentos de conexión y tnsping. (Por ejemplo, siempre el mismo usuario del sistema operativo o cada usuario tiene los mismos valores)

Veo que la salida de tnsping informa la versión 9.2, por lo que no es probable, pero en 11g el DB se registra con el oyente, lo que puede tomar un minuto más o menos. (Tal vez también sea cierto con 10 g). Los intentos de conectarse antes de esto no encontrarán el objetivo.

Otra posibilidad poco probable: ¿todavía se anuncia un servicio con el mismo nombre de servicio en el antiguo servidor host? Elimínelo si es posible.

Después de eso, comenzaría a mirar la red misma. ¿Un ping del servidor siempre es exitoso y rápido? Si está utilizando el nombre de host en lugar de IP en tnsnames.ora, ¿el nombre de host se resuelve de manera confiable en la IP correcta (nslookup). ¿Existe un firewall local y, de ser así, se está comportando?

Saludos Karl

Si está utilizando Oracle 10g, puede utilizar un Easy Connect controlador en su lugar:

//servername/instancename

,

//1.2.3.4/my.url.com

en tu caso.

Es inmune a lotes de TNSNAMES problemas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top