"Hombres y mujeres para los demás"

Posible solución de error “ORA-12505: TNS:listener does not currently know of SID given in connect descriptor”


Versión de Oracle: 11g corriendo en sistema operativo Windows de 64 bits.

La documentación, acerca de este error dice lo siguiente:

Causa: El listener recibe una petición para establecer una conexión a la base de datos o a otro servicio. El descriptor de conexión recibió en el listener especificado un SID (System ID) para una instancia (usualmente una instancia de base de datos) que o no ha sido registrado dinámicamente con ese listener aún, o no ha sido estáticamente configurado para el listener. Esta puede ser una condición temporal tal que ocurre después de que el listener ha iniciado, pero antes de que la instancia de la base de datos haya sido registrada con el listener.

Acción:
  • Esperar un momento e intentar conectarse por segunda vez.
  • Checar cuales instancias son actualmente conocidas por el listener ejecutando: lsnrctl services <listener_name>
  • Checar que el parámetro SID en el descriptor de conexión especifique una instancia conocida por el listener
  • Checar eventos en el archivo listener.log


Podemos para empezar, como la documentación sugiere, abrir una consola de windows y ejecutar el comando lsnrctl services LISTENER (este es el nombre que tiene mi Listener). Aunque no creo necesario decirlo, al menos los servicios OracleServiceORCL y Oracleoradb11 homeTNSListener deben estar encendidos.

Idealmente aquí debería aparecer, entre los servicios registrados por el listener, el correspondiente con la base de datos definida normalmente con un SID como puede ser “ORCL”. Seguramente no aparecerá dicha instancia, hay que resolverlo.

Para comenzar, buscamos las herramientas de configuración y migración de Oracle en “Todos los programas”, luego ubicamos y entramos en “Net manager”. En el explorador de objetos que ahí aparece ubiquemos el nodo Listeners y despleguémoslo, seleccionemos el listener que deseamos configurar

Del lado derecho de la pantalla veremos un combobox, escojamos Database Services para agregar la base de datos. Luego un formulario solicitará tres elementos: el nombre global de la base de datos, la ruta del directorio home de Oracle, y el SID. El nombre global de la base puede ser consultado en el archivo de configuración init.ora, ubicado en ORACLE_HOME\dbs, el SID lo consultamos en el archivo tnsnames.ora ubicado en ORACLE_HOME\NETWORK\ADMIN. En mi caso,

  • El nombre global de la base de datos resultó ser: ORCL,
  • El directorio home de Oracle: C:\app\Villalobos\product\11.2.0\dbhome_1
  • y el SID: orcl
El SID también puede ser consultado y establecido, me parece, en el mismo Net Manager, en el nodo Service Naming. Para terminar, guardamos los cambios, en el menú File, escogemos Save Network Configuration y reiniciamos el servicio OracleOraDb11g TNSListener para que los cambios sean aplicados. La configuración bien pudo haberse hecho manualmente modificando los archivos de configuración, pero en este caso utilizamos las herramientas que instalamos con Oracle para facilitar la tarea.


Con imágenes -> Error ORA 12505