Tenemos una aplicación que se ejecuta localmente y experimentamos el siguiente error:
ORA-12514: TNS: el oyente actualmente no conoce el servicio solicitado en el descriptor de conexión
Probé la conexión usando la TNSPing
que se resolvió correctamente e intenté SQLPlus
intentar conectar, lo que falló con el mismo error que el anterior. Usé esta sintaxis para SQLPlus
:
sqlplus username/password@addressname[or host name]
Hemos verificado que:
- TNS Listener en el servidor se está ejecutando.
- Oracle mismo en el servidor se está ejecutando.
No sabemos de ningún cambio realizado en este entorno. ¿Algo más que podamos probar?
Respuestas:
Tenía este problema y la solución era asegurarse de que en
tnsnames.ora
elSERVICE_NAME
es un nombre de servicio válido en su base de datos. Para encontrar nombres de servicio válidos, puede usar la siguiente consulta en Oracle:Una vez que actualicé
tnsnames.ora
a:entonces corrí:
¡Éxito! El oyente básicamente le dice que cualquier nombre de servicio que esté utilizando 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;) *)
fuente
Sé que esta es una vieja pregunta, pero aún sin respuesta. Me llevó 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%\NETWORK\ADMIN\listener.ora
El "SID_LIST" es solo eso, una lista de SID y nombres de servicios emparejados en un formato que puede copiar o buscar.
Agregué el problema Nombre del servicio, 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 podría verse inicialmente como:
... Y para que reconozca el nombre de un servicio
orcl
, puede cambiarlo a:fuente
listener.ora
almacena los nombres. Ni siquiera tengo unlistener.ora
archivo. También estoy en una estación de trabajo cliente que ejecuta SQL Developer e intento crear un enlace de base de datos cuando recibo el error. No tengo un servicio Oracle Listener para reiniciar.Tuve este problema en Windows server 2008 R2 y Oracle 11g
Si no tiene ninguna entrada para los servicios de la base de datos, cree una y configure la base de datos global correcta,
sid
y el inicio de Oracle.fuente
En mis circunstancias, el error se debió al hecho de que el oyente no tenía registrado el servicio de db. Resolví esto registrando los servicios. Ejemplo:
Mi descriptor en
tnsnames.ora
:Entonces, procedo a registrar el servicio en el
listener.ora
manual:Finalmente, reinicie el oyente por comando:
¡Hecho!
fuente
Iniciar OracleServiceXXX desde services.msc funcionó para mí en Windows.
fuente
Esto realmente debería ser un comentario a la respuesta de Brad Rippe , pero lamentablemente, no hay suficiente representante. Esa respuesta me consiguió el 90% del camino. En mi caso, la instalación y configuración de las bases de datos pusieron entradas en el archivo tnsnames.ora para las bases de datos que estaba ejecutando. Primero, pude conectarme a la base de datos configurando las variables de entorno (Windows):
y luego conectando usando
A continuación, ejecute el comando de la respuesta de Brad Rippe:
mostró que los nombres no coincidían exactamente. Las entradas creadas con el Asistente de configuración de la base de datos de Oracle fueron originalmente:
El nombre del servicio de la consulta era simplemente en
mydatabase
lugar demydatabase.mydomain.com
. Edité el archivo tnsnames.ora solo para el nombre base sin la porción de dominio para que se vean así:Reinicié el servicio de escucha TNS (a menudo uso
lsnrctl stop
ylsnrctl start
desde una ventana de comando de administrador [o Windows Powershell] en lugar del panel de control de Servicios, pero ambos funcionan). Después de eso, pude conectarme.fuente
Yo tuve el mismo problema. Para mi solo escribo
hizo el truco, hacerlo lo hace conectarse al nombre de servicio predeterminado, supongo.
fuente
jdbc:oracle:thin:@//localhost:1521/orcl
. La cadena de conexión corregido para eliminar este error fue:jdbc:oracle:thin:@localhost:1521
.lo que funcionó para mí fue realmente simple, solo necesitaba iniciar el servicio manualmente en los "Servicios de Windows" (services.msc en cmd trompt). mi nombre de servicio es: OracleServiceXXXXX.
fuente
Verifique que la base de datos esté activa. Inicie sesión en el servidor, establezca la variable de entorno ORACLE_SID en el SID de su base de datos y ejecute SQL * Plus como conexión local.
fuente
Este error puede ocurrir cuando una aplicación realiza una nueva conexión para cada interacción de la base de datos o las conexiones no se cierran correctamente. Una de las herramientas gratuitas para monitorear y confirmar esto es el desarrollador Oracle Sql (aunque esta no es la única herramienta que puede usar para monitorear las sesiones de DB).
puede descargar la herramienta desde el sitio de Oracle Sql Developer
Aquí hay una captura de pantalla de cómo monitorear tus sesiones. (si ve que se acumulan muchas sesiones para el usuario de la aplicación cuando ve el error ORA-12514, es una buena indicación de que puede tener un problema de grupo de conexión).
fuente
Resolví este problema en mi entorno Linux actualizando la IP de mi máquina en el archivo / etc / hosts.
Puede verificar su IP de red (inet end.) Con:
Vea si su IP coincide con el archivo / etc / hosts:
Edite su archivo / etc / hosts, si está integrado:
Adiós.
fuente
Para aquellos que pueden estar ejecutando Oracle en una VM (como yo), vi este problema porque mi VM se estaba quedando sin memoria, lo que parece haber impedido que OracleDB se inicie / ejecute correctamente. El aumento de mi memoria de VM y reiniciar solucionó el problema.
fuente
Muchas respuestas aquí, pero aquí viene un ejemplo de trabajo con código que puede copiar, pegar y probar de inmediato:
Para mí, el error 12514 se resolvió después de especificar el SERVICE_NAME correcto. Lo encuentra en el servidor en el archivo
tnsnames.ora
que viene con 3 nombres de servicio predefinidos (uno de ellos es "XE").HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.112.4.0\DllPath
. En máquinas de 64 bits, escriba adicionalmente enHKLM\SOFTWARE\Wow6432Node\Oracle\...
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.121.2.0\DllPath
Oracle.ManagedDataAccess.dll
que solo tiene 4 MB y es un archivo DLL administrado puro que funciona en procesos de 32 bits y 64 bits también y no depende de ninguna otra DLL y no requiere ninguna entrada de registro.Si
SERVICE_NAME=XE
está mal, obtiene el error 12514. ElSERVICE_NAME
es opcional. También puedes dejarlo lejos.fuente
También me enfrenté al mismo problema y pasé 3 días para desenterrarlo.
Esto sucede debido a su entrada de servicio TNS incorrecta.
Primero verifique si puede conectarse a la base de datos en espera desde la base de datos primaria usando sql>
sqlplus sys@orastand as sysdba
(orastand
es una base de datos en espera).Si no puede conectarse, entonces es un problema con el servicio. Corrija la entrada del nombre del servicio en el archivo TNS en el extremo primario.
Verifique la base de datos en espera de la misma manera. Haga los cambios aquí también si es necesario.
Asegúrese de que el
log_archive_dest_2
parámetro tenga el nombre de servicio correcto.fuente
Obtuve el mismo error porque el SID remoto especificado era incorrecto:
Consulté la base de datos del sistema:
seleccione * de global_name;
y encontré mi SID remoto ("XE").
Entonces podría conectarme sin ningún problema.
fuente
En mi caso, la base de datos se había quedado sin espacio en disco. Lo que hizo que no respondiera. Una vez que resolví ese problema, todo volvió a funcionar.
fuente
Para mí, esto fue causado por el uso de una dirección dinámica usando la instalación. Reinstalé Oracle usando un ipadress estático y luego todo estuvo bien
fuente
Reiniciar la VM funcionó para mí
fuente
Mi problema se resolvió reemplazando el 'ID' en la URL con el 'nombre del servicio' y el host correcto.
fuente
tnslsnr
está activo pero la base de datos está inactiva.Para los principiantes de Oracle no es obvio que la base de datos pueda estar inactiva mientras se aceptan las conexiones.
Tuve que iniciar la base de datos manualmente de esa manera
Y luego en la consola sql
En mi caso, no pude iniciar, pero recibí otro mensaje de error y encontré el origen de un problema: tuve que cambiar el nombre del host y luego el inicio automático de la base de datos volvió a funcionar.
fuente
He implementado la siguiente solución para resolver este problema.
He configurado ORACLE_HOME usando el símbolo del sistema (haga clic con el botón derecho en cmd.exe y Ejecutar como administrador del sistema).
Usado debajo del comando
set oracle_home="path to the oracle home"
Vaya a Todos los programas -> Oracle -ora home1 -> Herramientas de migración de configuración -> Net Manager -> Listener
Seleccione Servicios de base de datos del menú desplegable. Tanto el nombre de la base de datos global como el SID están configurados de la misma manera (ORCL en mi caso). Establecer Oracle Home Directory.
Ejemplo de ventana de Oracle Net Manager de la documentación de Oracle:
fuente
El problema era que mi url de cadena de conexión contenía el nombre de la base de datos en lugar del SID. Reemplazar el nombre de la base de datos con la conexión de base de datos Oracle SID resolvió este problema.
Para conocer sus SID de Oracle, puede examinar el
tnsnames.ora
archivo.XE
era el SID real, así que así es como se ve mi cadena de conexión Tomcat ahora:La versión de mi servidor era "Oracle 11.2 Express", pero la solución también debería funcionar en otras versiones.
fuente
En mi caso, faltaban corchetes alrededor de SERVICE_NAME en el archivo tnsnames.ora .
fuente
Para aquellos que usan spring-boot y jdbc para la conexión. Debe tener cuidado al escribir jdbcUrl en application.properties
Con SID en conexión de base de datos -
source.datasource.jdbcUrl = jdbc:oracle:thin:@[HOST][:PORT]:SID
Con el nombre del servicio en conexión db
globe.datasource.jdbcUrl = jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
Esto funcionó para mí :)
fuente