Después de consultar especialistas en el tema, programadores de deferentes ramas y profesores dimos con la respuesta a la pregunta y la plasmamos en esta publicación.
Solución:
Tuve este problema y la solución fue asegurarme de que tnsnames.ora
la 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
a:
TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = **)(PORT = **))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = **)
)
)
luego corrí:
sqlplus use[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 culpé a los DBA;) *)
Sé que esta es una vieja pregunta, pero aún no tiene 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 observa 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
La “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 está 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ó a 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!
Te mostramos las reseñas y valoraciones de los usuarios
Acuérdate de que tienes la opción de decir si te ayudó.