martes, 8 de abril de 2014

ORA-12514: TNS:listener does not currently know of service requested in connect

Esta mañana creé un "DBLINK" en la Base de Datos, como tantas otras veces, pero no funcionaba, cada vez que se intentaba ejecutar una Select daba el siguiente error:


SQL> select * from USER.QQ@DBLTEST;

ORA-12514: TNS:listener does not currently know of service requested in connect

Como he dado muchas vueltas por google intentando averiguar la causa y no he encontrado nada al respecto, creo esta entrada por si a alguien le ocurre lo mismo.

El DBLink se creó como:

SQL > create public database link DBLTEST connect to jp identified by jp23 USING 'BDjp';

Exactamente igual que otros muchos "DBlinks" ya existentes.

En el "tnsnames.ora" se configuró la cadena de conexión:

BDjp =
(DESCRIPTION = 
 (ADDRESS_LIST = 
  (ADDRESS = 
   (PROTOCOL = TCP)
    (HOST = 192.168.1.10) 
    (PORT = 1521))) 
   (CONNECT_DATA = 
    (SERVER = DEDICATED) 
    (SERVICE_NAME = BDjp)))

Igual que otros servicios que también están en el fichero "tnsnames.ora" y tienen asociados DBLINKS. Al hacer "tnsping" obtenía respuesta sin problemas:

bash-3.00$ tnsping BDjp

TNS Ping Utility for Solaris: Version 11.2.0.1.0 - Production on 08-APR-2014 13:19:51

Copyright (c) 1997, 2009, Oracle.  All rights reserved.

Used parameter files:
/u01/app/oracle/product/11.2.0/APRIL/network/admin/sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.107.49.217)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = GRH41DAE1)))
OK (10 msec)


A pesar de todo esto seguía sin funcionar.

Solución:

Cambiar la cadena de conexión indicada en el "tnsnames.ora", en lugar de "service_name" había que indicar "SID = GRH41DAE1". Quedando así:

BDjp =
(DESCRIPTION = 
 (ADDRESS_LIST = 
  (ADDRESS = 
   (PROTOCOL = TCP)
    (HOST = 192.168.1.10) 
    (PORT = 1521))) 
   (CONNECT_DATA = 
    (SERVER = DEDICATED) 
    (SID = BDjp)))Un pequeño detalle que pasó inadvertido por "copy-paste" de otras cadenas en el tnsnames.ora y porque funcionaba el comando tnsping, pero no el acceso a través de "DBlink".

Más información a este respecto:
http://docs.oracle.com/cd/B28359_01/network.111/b28317/tnsnames.htm#NETRF279
En la sección de "Connect Data"

Conclusión:
Cuidado con el "copy-paste" y cuidado con lo que parece funcionar "de primeras".

Sistema en el que se creó el DBLink:
Base de Datos: Oracle RAC 11gR1.0.7
Sistema Operativo: Solaris 10 Server
Máquinas:
Oracle (antes SUN) M5000

No hay comentarios:

Publicar un comentario