ORA-12505, TNS: el oyente actualmente no conoce el SID proporcionado en el descriptor de conexión

154

Instalé Oracle 11g Express Edition Release 2 en mi sistema operativo Windows 7 de 64 bits e intenté ejecutar el programa JDBC, luego recibí el siguiente error:

java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:412)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at com.jlcindia.jdbc.JDBCUtil.geOracleConnection(JDBCUtil.java:28)
    at Lab3O.main(Lab3O.java:15)
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:385)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1042)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:301)
    ... 8 more
Aprendiz
fuente
1
Iniciar OracleServiceXE manualmente desde los servicios funcionó para mí.
Sen

Respuestas:

184

Solucioné este problema corrigiendo mi cadena jdbc.

Por ejemplo, la cadena jdbc correcta debería ser ...

jdbc:oracle:thin:@myserver:1521/XE

Pero la cadena jdbs que estaba usando es ...

jdbc:oracle:thin:@myserver:1521:XE

(Nota: entre 1521y XEdebe ser a /)

Esta cadena jdbc incorrecta también me da un error ORA-12505.

Wade H
fuente
53
Si usa un / es un nombre de servicio de red, si usa dos puntos, es un SID.
eckes
89

Hay algunas cosas que pueden causar este problema, pero antes de comenzar con JDBC, debe asegurarse de que puede conectarse a la base de datos utilizando SQL * Plus. Si no está familiarizado con SQL * Plus, es una herramienta de línea de comandos para conectarse a bases de datos Oracle que ha sido una parte estándar de Oracle durante mucho tiempo y se incluye con Oracle XE.

Cuando se conecta a una base de datos Oracle utilizando JDBC, no se conecta directamente a la base de datos. En cambio, te conectas a un oyente TNS, que luego te conecta a la base de datos. El error ORA-12505significa que el oyente estaba activo y usted podía conectarse a él, pero no pudo conectarse a la base de datos porque no sabe que esa base de datos está activa. Hay dos razones para esto:

  • la base de datos no se ha iniciado,
  • la base de datos no se ha registrado con el oyente, por ejemplo, porque la base de datos se inició antes que el oyente. (Cuando se inicia la base de datos, se registra con un oyente si ya se está ejecutando. Si el oyente no se está ejecutando, la base de datos no se registra sola, y si se inicia el oyente, no busca bases de datos que puedan registrarse con él)

ORA-12505 significa que el oyente conoce esa base de datos, pero no ha recibido una notificación de la base de datos de que la base de datos está activa. (Si intentaba conectarse a la base de datos incorrecta, utilizando el SID incorrecto, obtendría un error ORA-12154 "TNS: no se pudo resolver el identificador de conexión especificado").

¿Qué servicios de Oracle se ejecutan en el complemento Servicios? (Abra esto desde el Panel de control> Herramientas administrativas> Servicios, o simplemente Inicio> Ejecutar> services.msc.) Necesita los servicios OracleServiceXE y OracleXETNSListener para ejecutarse.

Si ambos servicios se han iniciado, ¿puede conectarse a la base de datos en SQL * Plus utilizando cualquiera de los siguientes en el símbolo del sistema? (Supongo que está ejecutando estos en la máquina en la que ha instalado Oracle XE)

sqlplus system / system-password @XE
sqlplus system / system-password
sqlplus / as sysdba

(Reemplace system-passwordcon la contraseña que configuró para los usuarios de SYS y SYSTEM durante la instalación de Oracle XE).

El primero de estos tres se conecta a través del oyente TNS, pero los segundos dos se conectan directamente a la base de datos sin pasar por el oyente, y solo funcionan si está en la misma máquina que la base de datos. Si el primero falla pero los otros dos tienen éxito, entonces las conexiones JDBC también fallarán. Si es así, conéctese a la base de datos utilizando cualquiera de los otros dos y ejecute ALTER SYSTEM REGISTER. Luego salga de SQL * Plus e intente el primer formulario nuevamente.

Si el tercero falla pero el segundo funciona, agregue su cuenta de usuario al grupo ora_dba. Haga esto en Panel de control> Administración de equipos> Usuarios y grupos locales.

Una vez que pueda obtener conexiones del formulario

sqlplus system / system-password @XE

para trabajar, debe poder conectarse a Oracle XE a través de JDBC. (Por cierto, no nos ha mostrado el código JDBC que está utilizando para conectarse a la base de datos, pero sospecho que probablemente sea correcto; habría otros errores si algunas partes de la cadena de conexión estuvieran mal).

Luke Woodward
fuente
3
@Raj: No veo lo que tu edición aporta a la respuesta, así que la eliminé. Si desea aportar una cantidad significativa a una pregunta, publique su propia respuesta en lugar de editar la de otra persona.
Luke Woodward el
@LukeWoodward Recibo este error SP2-0734: unknown command beginning "system/ora..." - rest of line ignored. en los 3
vaibhavcool20
1
@qtpseleniumSupport: ese mensaje dice que estaba en SQL * Plus e ingresó la línea system/ora...(o SQL * Plus leyó esa línea desde un archivo que le había dicho que leyera). Las líneas de comando que di anteriormente están destinadas a ser utilizadas desde una ventana de símbolo del sistema / shell / Terminal. Si ya está ejecutando SQL * Plus, reemplácelo sqlpluscon connect.
Luke Woodward
"la base de datos no se ha registrado con el oyente, por ejemplo, porque la base de datos se inició antes que el oyente". - Esto fue todo, gracias!
Ursache
47

Yo también recibí el mismo error, pero cuando lo intenté, los tres fallaron. Si los tres anteriores fallan. Pruebe el estado LSNRCTL si encuentra que falta el servicio (XE en mi caso) intente esto

sqlplus /nolog
conn  system
alter system register;  
exit  
lsnrctl status  

Ahora puedes ver el servicio
Incluso si no ves prueba este

sqlplus /nolog  
conn system  
alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope = both;  
alter system register;  
exit  
lsnrctl status

Esto probablemente debería funcionar ...

Raj
fuente
2
¡Lo hiciste, hombre! Después de configurar el local_listener, el oyente orcl ahora se muestra en lsnrctl. ¡Un millón de gracias!
pregunta
Esto hizo que mi sistema funcionara, pero tenga en cuenta que ejecuté lo siguiente: ALTER SYSTEM set local-listener = XE;
Daniel Williams
cuando escribo: 'alter system set local_listener =' (ADDRESS = (PROTOCOL = TCP) (HOST = localhost) (PORT = 1521)) 'scope = both;' Devuelve un error: ORA-65040: operation not allowed from within a pluggable database¿qué significa? No se puede configurar el JDBC: /
Alg_D
1
las dos respuestas mejor votadas ayudaron, pero esta ayudó más. Parece que no tenía 127.0.0.1 como dirección de escucha (tenía una con el nombre local de mi PC). Entonces, al agregar este nuevo, comenzó a funcionar
johnbr
alter system set local_listener = ... trabajó para mi.
Ben Asmussen
31

Cuando obtiene este error "ORA-12505, TNS: el oyente no conoce actualmente el SID proporcionado en el descriptor de conexión"

Solución: abra Servicios e inicie OracleServiceXE, luego intente conectarse ...

C Nageswara Reddy
fuente
Tuve el mismo problema pero al ejecutar OracleServiceXE. Por lo tanto, reiniciar un servicio OracleServiceXE funcionó para mí. ¿No sabes por qué?
Hamedz
Cuando busque OracleServiceXE, tenga en cuenta que XE corresponde al SID de la base de datos, así que asegúrese de buscar el servicio correcto, OracleService [SID]
Sandoval0992
10

Encontré algunas razones para esta excepción. Son

1) El nombre de la base de datos XE de forma predeterminada. Por lo tanto, la URL será " jdbc: oracle: thin: @localhost: 1521: XE ".

2) Asegúrese de que OracleServiceXE, OracleXETNSListener se esté ejecutando. Estará en el Panel de control \ Todos los elementos del Panel de control \ Herramientas administrativas \ Servicios

rajeesh
fuente
8

Resolví este problema corrigiendo mi código JDBC.

la cadena JDBC correcta debería ser ...

conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:xe","system","ishantyagi");

Pero la cadena JDBC que estaba usando era ...

conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");

Entonces, el error de especificar orcl en lugar de xe mostró este error ya que el nombre SID era incorrecto.

javabeginner
fuente
En mi caso conection = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");funcionó.
Pran Kumar Sarkar
8

Mi problema se resuelve cuando uso el siguiente código:

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@IPAddress:1521/servicename","userName","Password");
Rasheed Puttur
fuente
7

Ante un error similar, ninguna de las soluciones anteriores ayudó. Hubo un problema en el archivo listner.ora. Por error, agregué SIDfuera de la SID_LISTvista a continuación (sección entre las estrellas *).

 SID_LIST_LISTENER =
      (SID_LIST =

        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
          (PROGRAM = extproc)
        )
        (SID_DESC =
          (SID_NAME = CLRExtProc)
          (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
          (PROGRAM = extproc)
        )
        )

 *(SID_DESC =
           (SID_NAME = XE)
           (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
         )*
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
          (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
        )
      )


    DEFAULT_SERVICE_LISTENER = (XE)

Corregido este error de la siguiente manera:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
       (SID_NAME = XE)
       (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
     )
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
  )


DEFAULT_SERVICE_LISTENER = (XE)

Detenido y la base de datos ingrese la descripción de la imagen aquí

Detuve los oyentes OracleServiceXE y OracleXETNSListener manualmente, ya que no se detuvo automáticamente al ir al Panel de control \ Todos los elementos del Panel de control \ Herramientas administrativas \ Servicios. Reinició la base de datos y funcionó de maravilla.

Nirmal Mangal
fuente
4

Inicialmente vine aquí con el mismo problema. Simplemente instalé Oracle 12c en Windows 8 (64 bits), pero desde entonces lo resolví 'TNSPING xe' en la línea de comando ... Si no se establece la conexión o no se encuentra el nombre, intente con el nombre de la base de datos, en mi caso fue 'orcl' ... 'TNSPING orcl' nuevamente y si suena con éxito, entonces necesita cambiar el SID a 'orcl' en este caso (o cualquier nombre de base de datos que haya utilizado) ...

Jose rego
fuente
4

Una posibilidad que no he visto ampliamente discutida es que puede haber un problema para resolver el nombre de host en la máquina host. Si no hay una entrada para $ (nombre de host) en / etc / hosts, el oyente de Oracle se confunde y no aparece.

Ese resultó ser mi problema, y ​​agregar el nombre de host y la dirección IP en / etc / hosts resolvió el problema.

BillT
fuente
4

Si tiene una conexión que funciona en Oracle SQL Developer, use la información en el menú de conexión para construir su url, como se describe en la siguiente imagen:

ingrese la descripción de la imagen aquí

En el ejemplo anterior, la url sería: jdbc:oracle:thin:@ORADEV.myserver.com:1521/myservice

Tenga en cuenta que si está utilizando un SID, entonces hay dos puntos (":") en lugar de una barra diagonal ("/") después del nombre del host.

Pierre C
fuente
2

Yo también enfrenté el mismo problema. Había instalado Oracle Express edition 10g en el sistema operativo Windows XP usando VMware y estaba funcionando bien. Dado que era muy incómodo escribir consultas SQL en la utilidad SQL proporcionada por 10g y como estaba acostumbrado a trabajar con el desarrollador SQL, instalé un desarrollador SQL de 32 bits en XP e intenté conectarme a mi DB SID "XE". Pero la conexión falló con el oyente de error-ORA-12505 TNS que actualmente no conoce el SID proporcionado en el descriptor de conexión. Estaba en el mar en cuanto a cómo se produjo este problema, ya que funcionaba bien con la utilidad SQL y también había creado algunas asignaciones de Informatica con el mismo. Busqué mucho sobre esto aquí y apliqué las sugerencias que me ofrecieron después de hacer ping al estado de "lsnrctl" en foros públicos, pero fue en vano. Sin embargo, esta mañana intenté crear una nueva conexión nuevamente, y Voila, funcionó sin problemas. Supongo que después de leer en algunas publicaciones que a veces el oyente escucha antes de que el DB se conecte o algo así (perdóneme por mi referencia cruda ya que soy un novato aquí), pero sugiero que reinicie la máquina y verifique nuevamente.

usuario2905345
fuente
2

Tuve el mismo problema, así que para resolver este problema, primero reconfiguré mi oyente usando netcadespués de eso, eliminé mi base de datos anterior que era ORCL dbcay luego volví a crear la nueva base de datos usandodbca

El technokrat
fuente
2

Me enfrenté al mismo problema y lo resolví reiniciando el servicio OracleServiceXE. Vaya a Services.msc y luego verifique que el servicio 'OracleServiceXE' esté UP y ejecutándose

Vijay Thayalan
fuente
2

Solucioné este problema cambiando " SID " a " SERVICE_NAME " en mi archivo TNSNAMES.ora.

Verifique si su base de datos solicita SID o SERVICE_NAME.

Salud

Akshay Lokur
fuente
2

Si usa Oracle Express Edition, debe tener esta url

jdbc: oracle: thin: @localhost: 1521: xe o jdbc: oracle: thin: @localhost: 1521 / XE

Tuve un problema similar con el complemento de configuración liquibase en pom.xml. Y cambié mi configuración:

`<configuration>
   <driver>oracle.jdbc.OracleDriver</driver>
   <url>jdbc:oracle:thin:@localhost:1521:xe</url>
   <defaultSchemaName></defaultSchemaName>
   <username>****</username>
   <password>****</password>
</configuration>`
Pavlo Chechehov
fuente
2

Conexión con = DriverManager.getConnection ("jdbc: oracle: thin: @localhost: 1521: xe", "scott", "tiger");

Error que obtuve:

java.sql.SQLException: el oyente rechazó la conexión con el siguiente error: ORA-12505, TNS: el oyente actualmente no conoce el SID proporcionado en el descriptor de conexión El descriptor de conexión utilizado por el cliente fue: localhost: 1521: xe

Cómo lo resolví:

Conexión con = DriverManager.getConnection ("jdbc: oracle: thin: localhost: 1521: xe", "scott", "tiger");

(Eliminar @)

No sé por qué, pero está funcionando ahora ...

Srikar Madhavapeddy
fuente
1

Verifique haciendo tnsping y nombre de instancia en la máquina host. Le dará la descripción de tns y la mayoría de las veces el nombre de host es diferente, lo que no coincide.

Resuelvo mi problema igualmente

En la máquina Unix $ tnsping (Enter)

Me da una descripción completa de tns donde descubrí que el nombre de host es diferente .. :)

Abhishek Banik
fuente
1

Verifique ambos OracleServiceXEy OracleXETNSListenerque el estado comience cuando navega porstart->run->services.msc .

Para mi caso, solo OracleXETNSListenerse inició pero OracleServiceXEno se inició, cuando comencé right clicking -> starty verifiqué la conexión, funciona para mí

usuario5211481
fuente
1

Tuve un problema similar en SQL Workbench.

URL:

jdbc: oráculo: delgado: @ 111.111.111.111: 1111: xe

no funciona

URL:

jdbc: oráculo: delgado: @ 111.111.111.111: 1111: asdb

trabajos.

Esto me ayuda en mi situación concreta. Me temo que podría existir muchas otras razones con diferentes soluciones.

Máťa - Stitod.cz
fuente
0

Tuve un problema similar. El problema comenzó a ocurrir repentinamente: tenemos una URL de conexión de base de datos con carga equilibrada, pero en las conexiones jdbc apuntaba a una sola base de datos directamente.

Cambió a cargar URL de db equilibrada y funcionó.

Kisanagaram
fuente
2
Recomendamos utilizar la URL de cadena de conexión totalmente calificada como se muestra jdbc: oracle: thin: @ (DESCRIPTION = (ADDRESS = (HOST = myhost) (PORT = 1521) (PROTOCOL = tcp)) (CONNECT_DATA = (SERVICE_NAME = myorcldbservicename)))
Nirmala
0

En mi caso no estaba funcionando, finalmente reinicié mi oracle y el oyente TNS y todo funcionó. Estuve luchando por 2 días.

Amarjeet
fuente
0

Obtuve este error ORA-12505, TNS: el oyente actualmente no conoce el SID proporcionado en el descriptor de conexión cuando intenté conectarme a Oracle DB usando el desarrollador SQL.

La cadena JDBC utilizada fue jdbc: oracle: thin: @myserver: 1521 / XE , obviamente la correcta y los dos servicios oracle obligatorios OracleServiceXE, OracleXETNSListener estaban en funcionamiento .

La forma en que resolví este problema (en Windows 10)

 1. Open run command.
 2. Type services.msc 
 3. Find services with name OracleServiceXE and OracleXETNSListener in the list.
 4. Restart OracleServiceXE service first. After completing the restart try restarting OracleXETNSListener service.
r-soleado
fuente
0

Además de ejecutar servicios (OracleServiceXE, OracleXETNSListener), existe la posibilidad de que su software / firewall antivirus pueda bloquearlos. Solo asegúrate de que no estén bloqueados.ingrese la descripción de la imagen aquí

sql_dummy
fuente
0

Simplemente lo arreglé reiniciando / iniciando oracleService en los servicios

Shahid Hussain Abbasi
fuente
0

Mi oráculo dejó de funcionar y recibí este error. Reinicié mi máquina y también probé las soluciones anteriores. Finalmente, abrí servicios de componentes y reinicié los servicios de Oracle y todo comenzó a funcionar. Espero que esto ayude a alguien.

rj4u
fuente
0

Estaba creando el enlace de la base de datos incorrectamente.

Una solución simple para mí fue simplemente cambiar 'SID' a SERVICE_NAME

CREATE DATABASE LINK my_db_link
CONNECT TO myUser IDENTIFIED BY myPassword
USING
'
(
    DESCRIPTION=
    (
        ADDRESS=
        (PROTOCOL=TCP)
        (HOST=host-name-heren)
        (PORT=1521)
    )
    (CONNECT_DATA=(SID=theNameOfTheDatabase))
)';

Cambiando

SID=theNameOfTheDatabase

a

SERVICE_NAME=theNameOfTheDatabase 

Resuelto mi problema.

Pablo
fuente