miércoles, 23 de mayo de 2007

Problemas de TNS utilizando DB links

Al definir un DB link y utilizarlo en una consulta, puede obtenerse el error:

ORA-12154: TNS:could not resolve service name

Nada parece estar mal:
  • Creamos el link utilizando el service name del tnsnames.ora
  • Verificamos que la entrada del servicio está justamente definida en el archivo
  • Revisamos que nuestra aplicación esté leyendo el tnsnames.ora correcto (en caso de que tengamos muchos)
  • El usuario y password del link funciona OK si me conecto por SQL*plus
  • Tengo el privilegio CREATE DATABASE LINK
  • Al crear el link me retorna que el link fue creado exitosamente
Al utilizar el link en un select, se obtiene el error mencionado.
La razón por la cual no encuentra el conector aún la desconozco, pero la forma de evitar el problema es:

En lugar de definir el link de esta forma:

create public database link uat1prod_lnk
connect to oramain
identified by "0racl3"
using 'produat1db';

donde 'produat1db' es el nombre del service name para ese conector (tnsnames.ora)

Definirlo así:

create public database link uat1prod_lnk
connect to oramain
identified by "0racl3"
using '(description=(address=(protocol=TCP)
(host=192.168.3.32)(port=1521))(connect_data=(sid=uat1db)))';


donde 'uat1db' es el nombre del SID de la base de datos.

Crearlo de esta manera corrige el problema. Otra ventaja adicional que me proporciona esta sintaxis, es independencia del tnsnames.ora.
Lo único que necesito es: IP, puerto y SID de la base de datos.

4 comentarios:

Unknown dijo...

Fantastico, me has resuelto el problema.
Necesitaba poder crear DB Link digamos que dinamicamente, lo más independiente posible de los ficheros de configuracion del servidor de ORACLA.

Excelente solucion,
GRACIAS !

frankalas dijo...

Eres la Ley... muchas gracias me funciono perfectamente.

Anónimo dijo...

Excelente! Me solucionaste el problema! Mil Gracias!!!!!

Unknown dijo...

Gracias por tu aportación, ¿Como podría ejecutar una consulta que muestre los datos de dos bases de datos?