Saltar al contenido

ORA-12514 TNS: el oyente no conoce actualmente el servicio solicitado en el descriptor de conexión

Solución:

Tuve este problema y la solución fue asegurarme de tnsnames.ora los SERVICE_NAME es un nombre de servicio válido en su base de datos. Para averiguar nombres de servicios válidos, puede utilizar la siguiente consulta en Oracle:

select value from v$parameter where name="service_names"

Una vez que actualicé tnsnames.ora para:

TEST =
   (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = *<validhost>*)(PORT = *<validport>*))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = *<servicenamefromDB>*)
    )
)

luego corrí:

sqlplus [email protected]

¡Éxito! El oyente básicamente le dice que cualquier service_name que esté usando no es un servicio válido según la base de datos.

(* Estaba ejecutando sqlplus desde la estación de trabajo del cliente Win7 a la base de datos remota y culpo a los DBA;) *)

Sé que esta es una vieja pregunta, pero aún sin respuesta. Me tomó un día de investigación, pero encontré la solución más simple, al menos en mi caso (Oracle 11.2 en Windows 2008 R2) y quería compartir.

El error, si se mira directamente, indica que el oyente no reconoce el nombre del servicio. Pero, ¿dónde guarda los nombres de los servicios? En %ORACLE_HOME%NETWORKADMINlistener.ora

“SID_LIST” es solo eso, una lista de SID y nombres de servicios emparejados en un formato que puede copiar o buscar.

Agregué el nombre del servicio del problema, luego en el panel de control de “Servicios” de Windows, hice un “Reinicio” en el servicio de escucha de Oracle. Ahora todo esta bien.


Por ejemplo, su archivo listener.ora inicialmente podría verse así:

# listener.ora Network Configuration File: C:apporacle_userproduct12.1.0dbhome_1networkadminlistener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:apporacle_userproduct12.1.0dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:apporacle_userproduct12.1.0dbhome_1binoraclr12.dll")
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

… Y para que reconozca un nombre de servicio de orcl, puede cambiarlo a:

# listener.ora Network Configuration File: C:apporacle_userproduct12.1.0dbhome_1networkadminlistener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:apporacle_userproduct12.1.0dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:apporacle_userproduct12.1.0dbhome_1binoraclr12.dll")
    )
    (SID_DESC = 
        (GLOBAL_DBNAME = orcl)
        (ORACLE_HOME = C:apporacle_userproduct12.1.0dbhome_1)
        (SID_NAME = orcl)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

En mis circunstancias, el error se debió al hecho de que el oyente no tenía registrado el servicio de la base de datos. Resolví esto registrando los servicios. Ejemplo:

Mi descriptor en tnsnames.ora:

LOCALDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = LOCALDB)
    )
  )

Entonces, procedo a registrar el servicio en el listener.ora a mano:

SID_LIST_LISTENER =
    (SID_DESC =
      (GLOBAL_DBNAME = LOCALDB)
      (ORACLE_HOME = C:Oracleproduct11.2.0dbhome_1)
      (SID_NAME = LOCALDB)
    )

Finalmente, reinicie el oyente con el comando:

> lsnrctl stop
> lsnrctl start

¡Hecho!

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *