Ratio: 4 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio desactivado
 
Oracle

Descripción y posible soluciones para el error ora-12514 de Oracle.

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

 

Cause: The listener received a request to establish a connection to a database or other service. The connect descriptor received by the listener specified a service name for a service (usually a database service) that either has not yet dynamically registered with the listener or has not been statically configured for the listener. This may be a temporary condition such as after the listener has started, but before the database instance has registered with the listener.

 

Causa: El listener recibe una solicitud para establecer una conexión con una base de datos u otro servicio, pero, el descriptor de conexión recibido por el listener especificado un nombre de servicio para un servicio (por lo general un servicio de base de datos) que o bien aún no se ha registrado de forma dinámica con el listener o no se ha configurado de forma estática para el listener. Esto puede ser una condición temporal, después de que el listener ha sido arrancado, pero antes de la instancia de base de datos se haya registrado con el listener.

Acciones:

 

  • Esperar un momento y tratar de conectar una segunda vez.
  • Comprobar que servicios son conocidos por el listener mediante la ejecución en el servidor de base datos Oracle: lsnrctl services <listener nombre>
  • Comprobar que el parámetro SERVICE_NAME en el descriptor de conexión de cliente utiliza un nombre de servicio conocido por el listerner en el servidor de bases dedato Oracle.
  • Si se utilizo un identificador de conexión easy, comprueba que el nombre del servicio especificado es un servicio conocido por el listener en el bases de datos Oracle.
  • Comprueba si hay un evento en el archivo listener.log en el servidor de base de datos Oracle.

 

Resolver problemas.

 

Este sencillo procedimiento, dividido en dos partes, te ayudará a diagnosticar y solucionar los problemas más comunes de configuración de SQLNET y tnsnames.

 

1. Prueba de comunicación entre el cliente y el listener del servidor de bases de datos Oracle.

 

Vamos a utilizar la herramienta tnsping para completar este paso.

 

Aquí, vamos a utilizar el tnsping para demostrar que a) el tnsnames.ora en el cliente tiene el puerto y el nombre de host correctos, y b) que hay un listener que escucha en el host (servidor de base de datos) y el puerto.

 

Ejecutar tnsping:

 

tnsping <nombre_entrada_tnsnames>

 

Si es correcta, verás algo como esto:

 


$ tnsping scr9
Used TNSNAMES adapter to resolve the alias
Attempting to contact DESCRIPCIÓN (= (= ADDRESS_LIST (= DIRECCION (PROTOCOL = TCP) (HOST = bloo) (PORT = 1521))) (CONNECT_DATA = (SERVIDOR DEDICADO =) (SERVICE_NAME = scr9)))
OK (40 ms)


 

Si no, aquí hay algunos de los errores más comunes, y algunas sugerencias para la solución de ellos:

 

TNS-03505: Failed to resolve name

The specified database name was not found in the tnsnames.ora, onames or ldap. This means that tnsping hasn't even got as far as trying to make contact with a server - it simply can't find any record of the database that you are trying to tnsping. Make sure that you've spelled the database name correctly, and that it has an entry in the tnsnames.ora.

 

Si tienes un sqlnet.ora, mirar las asignaciones en el NAMES.DEFAULT_DOMAIN. Si se establece, entonces todas las entradas en el tnsnames.ora deben tener un sufijo de dominio correspondiente.

 

TNS-12545: Connect failed because target host or object does not exist

The host specified in the tnsnames is not contactable. Verify that you have spelled the host name correctly. If you have, try pinging the host with 'ping <hostname>'. If ping returns 'unknown host', speak to your network admin. It might be that you have a DNS issue (you could try using the IP address if you have it to hand). If you get 'host unreachable', again speak to your network person, the problem could be down to a routing or firewall issue.

 

TNS-12541: TNS:no listener

The hostname was valid but the listener was not contactable. Things to check are that the tnsnames has the correct port (and hostname) specified, and that the listener is running on the server and using the correct port.

 

El tnsping tarda mucho tiempo en devolver el OK o fallo.
Esto sucede en situaciones en que o no hay un listener escuchando en el servidor de base de datos o el hosts o/y puerto son incorrectos. Asegúrate de que hayas especificado el puerto correcto, y que el listener en el servidor de base datos Oracle esta arrancado. Si todo parece estar bien, trata de hacer un "$ netstat -ap | grep 1521 ' (esto solo para Unix/Linux) para averiguar qué el listener está escuchando en ese puerto.

 

2. Intentar una conexión a la instancia.

 

Una vez que has comprobado que el tnsnames está hablando con el listener correctamente, el siguiente paso es intentar una conexión permanente a la instancia. Para ello usaremos sqlplus:

 


sqlplus [nombre de usuario]/[contraseña]@<nombre_entrada_tnsnames>

 

Si funciona con éxito entraras en la instancia. Si no, aquí hay algunos errores comunes:

 

ORA-01017: invalid username/password; logon denied

Esto en realidad es un error pero en este caso es bueno para nosotros ya que aunque estamos utilizando un nombre de usuario o contraseña erroneos hemos tenido éxito en la conexión a la instancia.

 

ORA-12505: TNS:listener does not currently know of SID given in connect

O bien el SID está mal escrito en el tnsnames, o el listener no está a la escucha para el SID especificado en el tnsnames. Comprueba el tnsnames.ora. Si se ve bien, hacer un 'lsnrctl status' en tu servidor de bases de datos Oracle, para ver qué bases de datos está escuchando.

 

ORA-12514: TNS:listener could not resolve SERVICE_NAME given in connect

Esto es un error común y significa que, mientras que el listener es localizable, la base de datos Oracle (o más bien el servicio) que se especifica en el tnsnames no era una de las cosas que esta escuchando el listener en el servidor de bases de datos Oracle.

 

Comenzar por buscar en tu tnsnames.ora. En él, veras la asignación SERVICE_NAME = NOMBRE.

 

Si está ejecutando una base de datos de instancia única (es decir, no RAC), y está seguro de que usted no está utilizando los servicios, es más fácil de cambiar SERVICE_NAME = a = SID en tu tnsnames. El uso de nombres de servicio es la forma más moderna de hacer las cosas, y que tiene beneficios, pero SID sigue funcionando perfectamente (por ahora).

 

Si prefieres seguir utilizando los nombres de servicio, primero debes verificar que hayas escrito correctamente el nombre del servicio en tu tnsnames. Si se ve bien comprobar que servicios esta escuchando el listener en el servidor de bases de datos Oracle. Para ello, ejecuta 'lsnrctl services' en tu servidor. Si no hay una entrada para el servicio en concreto, debes asegurarte de que el parámetro service_names está configurado correctamente en la base de datos.