oracle - solicitado - ora-12514 solucion
ORA-12514 TNS: el oyente no conoce actualmente el servicio solicitado en el descriptor de conexión (18)
En mi caso, el error se debió al hecho de que el oyente no tenía registrado el servicio del DB. Lo resolví 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
manualmente:
SID_LIST_LISTENER =
(SID_DESC =
(GLOBAL_DBNAME = LOCALDB)
(ORACLE_HOME = C:/Oracle/product/11.2.0/dbhome_1)
(SID_NAME = LOCALDB)
)
)
Finalmente, reinicie el oyente por comando:
> lsnrctl stop
> lsnrctl start
¡Hecho!
Tenemos una aplicación ejecutándose localmente en la que experimentamos el siguiente error:
ORA-12514: TNS: el oyente no conoce actualmente el servicio solicitado en el descriptor de conexión
TNSPing
la conexión usando TNSPing
que se resolvió correctamente y probé SQLPlus
para intentar la conexión, que falló con el mismo error que el anterior. SQLPlus
esta sintaxis para SQLPlus
:
sqlplus username/password@addressname[or host name]
Hemos verificado que:
- el TNS Listener en el servidor se está ejecutando.
- Oracle en el servidor se está ejecutando.
No sabemos de ningún cambio que se haya realizado en este entorno. ¿Algo más que podamos probar?
En mi caso, la base de datos se había quedado sin espacio en disco. Lo que provocó que no respondiera. Una vez que aclare ese problema, todo funcionó de nuevo.
Este error puede ocurrir cuando una aplicación establece una nueva conexión para cada interacción con 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 sesiones de DB).
Puede descargar la herramienta del sitio de Oracle Sql Developer
Aquí hay una captura de pantalla de cómo monitorear sus sesiones. (Si ve muchas sesiones acumulándose para el usuario de la aplicación durante el momento en que ve el error ORA-12514, es una buena indicación de que puede haber un problema en el grupo de conexiones).
Esto realmente debería ser un comentario de la respuesta de , pero desafortunadamente no es suficiente. Esa respuesta me dio el 90% del camino allí. En mi caso, la instalación y configuración de las bases de datos puso entradas en el archivo tnsnames.ora para las bases de datos que estaba ejecutando. Primero, pude conectarme a la base de datos estableciendo las variables de entorno (Windows):
set ORACLE_SID=mydatabase
set ORACLE_HOME=C:/Oracle/product/11.2.0/dbhome_1
y luego conectando usando
sqlplus / as sysdba
A continuación, ejecute el comando de la respuesta de Brad Rippe:
select value from v$parameter where name=''service_names'';
mostró que los nombres no coincidían exactamente. Las entradas tal como se crearon utilizando el Asistente de configuración de la base de datos de Oracle donde originalmente:
MYDATABASE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mylaptop.mydomain.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = mydatabase.mydomain.com)
)
)
El nombre del servicio de la consulta fue solo mydatabase
lugar de mydatabase.mydomain.com
. Edité el archivo tnsnames.ora solo con el nombre base sin la porción del dominio, por lo que se veía así:
MYDATABASE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mylaptop.mydomain.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = mydatabase)
)
)
lsnrctl stop
servicio TNS Listener (a menudo utilizo lsnrctl stop
y lsnrctl 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.
He hecho lo siguiente para resolver este problema.
He configurado oracle_home en el indicador de cmd (clic con el botón derecho en cmd.exe Ejecutar como administrador del sistema). usado debajo del comando
establecer oracle_home = "camino a la casa del oráculo"
Tenía Oracle instalado en mi D: unidad.
- Y vaya a Todos los programas -> Oracle -ora home1 -> Herramientas de migración de configuración Administrador de red -> Oyente -> seleccione Servicios de base de datos del menú desplegable -> El nombre de la base de datos global y el SID ambos están configurados para el mismo en mi caso es ORCL, establezca el directorio oracle_home. Haga clic en Archivo y guarde la configuración de red.
Iniciar OracleServiceXXX desde services.msc me funcionó en Windows.
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.
Muchas respuestas aquí, pero aquí viene un ejemplo de trabajo con código que puede copiar, pegar y probar inmediatamente:
Para mí, el error 12514 se resolvió después de especificar el SERVICE_NAME correcto. Encontrará eso en el servidor en el archivo tnsnames.ora
que viene con 3 nombres de servicio predefinidos (uno de ellos es "XE").
- Instalé la base de datos Oracle Express OracleXE112 que ya viene con algunas tablas de demostración preinstaladas.
- Cuando inicia el instalador, se le solicita una contraseña. Ingresé "xxx" como contraseña. (no usado en producción)
- Mi servidor se ejecuta en la máquina 192.168.1.158
- En el servidor, debe permitir explícitamente el acceso para el proceso TNSLSNR.exe en el Firewall de Windows. Este proceso escucha en el puerto 1521.
- OPCIÓN A: para C # (.NET2 o .NET4) puede descargar ODAC11 , desde donde debe agregar Oracle.DataAccess.dll a su proyecto. Además, esta DLL depende de: OraOps11w.dll, oci.dll, oraociei11.dll (130 MB), msvcr80.dll. Estas DLL deben estar en el mismo directorio que el EXE o debe especificar la ruta de la DLL en:
HKEY_LOCAL_MACHINE/SOFTWARE/Oracle/ODP.NET/4.112.4.0/DllPath
. En máquinas de 64 bits, escriba adicionalmente enHKLM/SOFTWARE/Wow6432Node/Oracle/...
- OPCIÓN B: si ha descargado ODAC12 , necesita Oracle.DataAccess.dll, OraOps12w.dll, oci.dll, oraociei12.dll (160 MB), oraons.dll, msvcr100.dll. La ruta del Registro es
HKEY_LOCAL_MACHINE/SOFTWARE/Oracle/ODP.NET/4.121.2.0/DllPath
- OPCIÓN C: si no desea archivos DLL de más de 100 MB, descargue ODP.NET_Managed12.xxxxxxxx.zip en el que encuentre
Oracle.ManagedDataAccess.dll
que tiene solo 4 MB y es una DLL administrada pura que funciona en 32 procesos de bit y 64 bit también y no depende de ninguna otra DLL y no requiere ninguna entrada de registro. - El siguiente código C # funciona para mí sin ninguna configuración en el lado del servidor (solo la instalación predeterminada):
using Oracle.DataAccess.Client; or using Oracle.ManagedDataAccess.Client; .... string oradb = "Data Source=(DESCRIPTION=" + "(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.158)(PORT=1521)))" + "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE)));" + "User Id=SYSTEM;Password=xxx;"; using (OracleConnection conn = new OracleConnection(oradb)) { conn.Open(); using (OracleCommand cmd = new OracleCommand()) { cmd.Connection = conn; cmd.CommandText = "select TABLESPACE_NAME from DBA_DATA_FILES"; using (OracleDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { listBox.Items.Add(dr["TABLESPACE_NAME"]); } } } }
Si SERVICE_NAME=XE
es incorrecto, obtiene el error 12514. SERVICE_NAME
es opcional. También puedes dejarlo.
Obtuve el mismo error porque el SID remoto especificado era incorrecto:
> sqlplus $DATASOURCE_USERNAME/$DATASOURCE_PASSWORD@$DB_SERVER_URL/$REMOTE_SID
Consulté la base de datos del sistema:
select * from global_name;
y encontré mi SID remoto ("XE").
Entonces podría conectarme sin ningún problema.
Para aquellos que pueden estar ejecutando Oracle en una máquina virtual (como yo) vi este problema porque mi máquina virtual se estaba quedando sin memoria, lo que parece haber impedido que OracleDB se inicie / se ejecute correctamente. Aumentar mi memoria VM y reiniciar solucionó el problema.
Para mí, esto fue causado por el uso de una ipadress dinámica mediante la instalación. Reinstalé Oracle usando una ipadress estática y luego todo estuvo bien
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:
$ifconfig
Vea si su IP coincide con el archivo / etc / hosts:
$cat /etc/hosts
Edite su archivo / etc / hosts, si está incorporado:
$sudo gedit /etc/hosts
Adiós.
Sé que esta es una vieja pregunta, pero aún no ha sido respondida. 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 compartirla.
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.
Tuve el mismo problema, para mí solo escribir
sqlplus myusername/mypassword@localhost
hizo el truco, al hacerlo lo hace conectar con el nombre del servicio predeterminado, supongo.
Tuve este problema en Windows Server 2008 R2 y Oracle 11g
vaya a Net Manager> Listener> seleccione los servicios de la base de datos de la combox> "Global Database Name" debe ser el mismo que "SID" y "Oracle Home Directory" debe ser correcto.
Si no tiene ninguna entrada para servicios de bases de datos, cree una y configure la base de datos global correcta, el hogar de sid
y oracle.
Tuve este problema y la solución fue asegurarme de que en tnsnames.ora
el SERVICE_NAME
es un nombre de servicio válido en su base de datos. Para buscar nombres de servicio válidos, puede usar la siguiente consulta en oráculo:
select value from v$parameter where name=''service_names''
Una vez que actualicé tnsnames.ora
a:
TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = *<validhost>*)(PORT = *<validport>*))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = *<servicenamefromDB>*)
)
)
entonces corrí:
sqlplus user@TEST
¡Éxito! El oyente básicamente le dice que cualquier nombre de servicio que esté utilizando no es un servicio válido de acuerdo con la base de datos.
(* Estaba ejecutando sqlplus desde la estación de trabajo cliente de Win7 a DB remota y culpo a los DBA;) *)
Verifique que la base de datos esté activa. Inicie sesión en el servidor, establezca la variable de entorno ORACLE_SID en su SID de base de datos y ejecute SQL * Plus como una conexión local.
también me enfrenté al mismo problema y pasé 3 días para desenterrarlo. Esto sucede debido a la entrada incorrecta del servicio TNS. Primero compruebe si puede conectarse a la base de datos en espera de la base de datos primaria usando sql> sqlplus sys @ ostandstand ya que sysdba (orastand es una base de datos en espera); si no puede conectarse, es un problema con el servicio. Corrija la entrada del nombre del servicio en el archivo TNS en el extremo primario. Compruebe de la misma manera en la base de datos en espera, si es necesario hacer los cambios aquí también. y Asegúrese de que el parmater log_archive_dest_2 tenga el nombre del servicio correcto.