ORA-12505, TNS: il listener non è al momento a conoscenza del SID fornito nel descrittore di connessione


154

Ho installato Oracle 11g Express Edition Release 2 nel mio sistema operativo Windows 7 a 64 bit e ho provato a eseguire il programma JDBC, quindi ho ricevuto il seguente errore:

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

1
Avvio di OracleServiceXE manualmente dai servizi ha funzionato per me.
Sen

Risposte:


184

Ho risolto questo problema correggendo la mia stringa jdbc.

Ad esempio, la stringa jdbc corretta dovrebbe essere ...

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

Ma la stringa jdbs che stavo usando è ...

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

(Nota: tra 1521e XEdovrebbe essere un /)

Questa brutta stringa jdbc mi dà anche un errore ORA-12505.


53
Se si utilizza a / it è un nome di servizio di rete, se si utilizzano due punti è un SID.
Verifica il

89

Ci sono alcune cose che possono causare questo problema, ma prima di iniziare con JDBC, devi essere sicuro di poterti connettere al database usando SQL * Plus. Se non hai familiarità con SQL * Plus, è uno strumento da riga di comando per la connessione ai database Oracle che è stato una parte standard di Oracle per lungo tempo ed è incluso in Oracle XE.

Quando ci si connette a un database Oracle utilizzando JDBC, non ci si collega direttamente al database. Invece, ti connetti a un listener TNS, che quindi ti connette al database. L'errore ORA-12505indica che il listener era attivo e che era possibile connettersi ad esso, ma che non poteva connettersi al database perché non sapeva che quel database era attivo. Ci sono due ragioni per questo:

  • il database non è stato avviato,
  • il database non è stato registrato con il listener, ad es. perché il database è stato avviato prima del listener. (Quando il database viene avviato, si registra con un listener se è già in esecuzione. Se il listener non è in esecuzione, il database non si registra da solo e, se il listener si avvia, non va alla ricerca di database che potrebbero registrati con esso.)

ORA-12505 significa che il listener è a conoscenza di quel database, ma il listener non ha ricevuto una notifica dal database che il database è attivo. (Se si stesse tentando di connettersi al database errato, utilizzando il SID errato, si otterrebbe un errore ORA-12154 "TNS: impossibile risolvere l'identificatore di connessione specificato".)

Quali servizi Oracle sono in esecuzione nello snap-in Servizi? (Apri da Pannello di controllo> Strumenti di amministrazione> Servizi o semplicemente Start> Esegui> services.msc.) I servizi OracleServiceXE e OracleXETNSListener sono in esecuzione.

Se entrambi i servizi sono stati avviati, è possibile connettersi al database in SQL * Plus utilizzando una delle seguenti opzioni al prompt dei comandi? (Suppongo che tu li stia eseguendo sulla macchina su cui hai installato Oracle XE.)

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

(Sostituisci system-passwordcon la password impostata per gli utenti SYS e SYSTEM durante l'installazione di Oracle XE.)

Il primo di questi tre si collega tramite il listener TNS, ma i secondi due si connettono direttamente al database senza passare attraverso il listener e funzionano solo se si è sullo stesso computer del database. Se il primo fallisce ma gli altri due riescono, anche le connessioni JDBC falliranno. In tal caso, connettersi al database utilizzando uno degli altri due ed eseguire ALTER SYSTEM REGISTER. Quindi uscire da SQL * Plus e riprovare il primo modulo.

Se il terzo fallisce ma il secondo funziona, aggiungi il tuo account utente al gruppo ora_dba. Fallo in Pannello di controllo> Gestione computer> Utenti e gruppi locali.

Una volta che puoi ottenere le connessioni del modulo

sqlplus system / system-password @XE

per funzionare, dovresti essere in grado di connetterti a Oracle XE tramite JDBC. (Per inciso, non ci hai mostrato il codice JDBC che stai utilizzando per collegarti al database, ma sospetto che sia molto probabilmente corretto; ci sarebbero vari altri errori se parti della stringa di connessione fossero errate.)


3
@Raj: non vedo cosa porta la tua modifica alla risposta, quindi l'ho cancellata. Se desideri contribuire in modo significativo a una domanda, pubblica la tua risposta anziché modificare quella di qualcun altro.
Luke Woodward,

@LukeWoodward Ricevo questo errore SP2-0734: unknown command beginning "system/ora..." - rest of line ignored. su tutti e 3
vaibhavcool20

1
@qtpseleniumSupport: quel messaggio dice che eri in SQL * Plus e hai inserito la riga system/ora...(o SQL * Plus ha letto quella riga da un file che gli hai detto di leggere). Le righe di comando che ho dato sopra sono pensate per essere usate da una finestra prompt dei comandi / shell / Terminale. Se stai già eseguendo SQL * Plus, sostituiscilo sqlpluscon connect.
Luke Woodward,

"il database non è stato registrato con il listener, ad esempio perché il database è stato avviato prima del listener." - eccolo, grazie!
Ursache,

47

Anch'io ho avuto lo stesso errore ma quando hanno provato tutti e tre hanno fallito. Se i tre precedenti falliscono. Prova lo stato LSNRCTL se trovi il servizio (XE nel mio caso) mancante prova questo

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

Ora puoi vedere il servizio
Anche se non lo vedi prova questo

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

Questo dovrebbe probabilmente funzionare ...


2
L'hai fatto, amico! Dopo aver impostato il local_listener, il listener orcl viene ora mostrato in lsnrctl. Grazie mille!
chiede il

Questo ha fatto funzionare il mio sistema, ma nota che ho eseguito quanto segue: ALTER SYSTEM set local-listener = XE;
Daniel Williams,

quando scrivo: 'alter system set local_listener =' (ADDRESS = (PROTOCOL = TCP) (HOST = localhost) (PORT = 1521)) 'scope = both;' Restituisce un errore: ORA-65040: operation not allowed from within a pluggable databasecosa significa? Impossibile configurare JDBC: /
Alg_D

1
entrambe le risposte più votate hanno aiutato, ma questa ha aiutato di più. Sembra che non avessi 127.0.0.1 come indirizzo di ascolto (ne avevo uno con il nome locale del mio PC). Quindi aggiungendo questo nuovo, ha iniziato a funzionare
johnbr

alter system set local_listener = ... ha funzionato per me.
Ben Asmussen,

31

Quando viene visualizzato questo errore "ORA-12505, TNS: listener attualmente non è a conoscenza del SID fornito nel descrittore di connessione"

Soluzione: apri i servizi e avvia OracleServiceXE, dopodiché prova a connetterti ...


Ho avuto lo stesso problema ma con OracleServiceXE in esecuzione. Pertanto, il riavvio di un servizio OracleServiceXE ha funzionato per me. Non so perché ?!
Hamedz,

Quando cerchi OracleServiceXE, tieni presente che XE corrisponde al SID della base di dati, quindi assicurati di cercare il servizio giusto, OracleService [SID]
Sandoval0992,

10

Ho trovato alcuni motivi per questa eccezione

1) Il nome del database XE per impostazione predefinita. Quindi l'URL sarà " jdbc: oracle: thin: @localhost: 1521: XE ".

2) Assicurarsi che OracleServiceXE, OracleXETNSListener in esecuzione sia in Pannello di controllo \ Tutti gli elementi del Pannello di controllo \ Strumenti di amministrazione \ Servizi


8

Ho risolto questo problema correggendo il mio codice JDBC.

la stringa JDBC corretta dovrebbe essere ...

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

Ma la stringa JDBC che stavo usando era ...

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

Quindi, l'errore di specificare orcl invece di xe ha mostrato questo errore poiché il nome SID era sbagliato.


Nel mio caso ha conection = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");funzionato.
Pran Kumar Sarkar,

8

Il mio problema viene risolto quando utilizzo il codice seguente:

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

7

Di fronte a un errore simile, nessuna delle soluzioni di cui sopra non ha aiutato. Si è verificato un problema nel file listner.ora. Per errore avevo aggiunto SIDfuori dal SID_LISTvedere sotto (sezione tra le stelle *).

 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)

Corretto questo errore come di seguito:

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)

Arrestato e il database inserisci qui la descrizione dell'immagine

Arrestato manualmente i listener OracleServiceXE e OracleXETNSListener poiché non si è arrestato automaticamente andando su Pannello di controllo \ Tutti gli elementi del pannello di controllo \ Strumenti di amministrazione \ Servizi. Riavviato il database e ha funzionato come un fascino.


4

inizialmente sono venuto qui con lo stesso problema. Avevo appena installato Oracle 12c su Windows 8 (64 bit), ma da allora l'ho risolto da "TNSPING xe" sulla riga di comando ... Se la connessione non è stata stabilita o il nome non è stato trovato, prova il nome del database, nel mio caso era "orcl" ... "TNSPING orcl" di nuovo e se esegue il ping correttamente, è necessario modificare il SID in "orcl" in questo caso (o qualunque sia il nome del database che hai usato) ...


4

Una possibilità che non ho visto ampiamente discusso è che potrebbe esserci un problema nella risoluzione del nome host sul computer host stesso. Se non è presente alcuna voce per $ (nome host) in / etc / hosts, il listener Oracle viene confuso e non verrà visualizzato.

Questo si è rivelato essere il mio problema e l'aggiunta del nome host e dell'indirizzo IP in / etc / hosts ha risolto il problema.



4

Se disponi di una connessione funzionante in Oracle SQL Developer, utilizza le informazioni nel menu di connessione per creare l'URL, come descritto nella seguente immagine:

inserisci qui la descrizione dell'immagine

Nell'esempio sopra, l'URL sarebbe: jdbc:oracle:thin:@ORADEV.myserver.com:1521/myservice

Nota che se stai usando un SID, allora ci sono due punti (":") invece di una barra ("/") dopo il nome host.


2

Anch'io ho affrontato lo stesso problema. Avevo installato Oracle Express Edition 10g nel sistema operativo Windows XP utilizzando VMware e funzionava bene. Dato che era molto imbarazzante digitare query SQL nell'utilità SQL fornita da 10g e da quando ero abituato a lavorare con lo sviluppatore SQL, ho installato lo sviluppatore SQL a 32 bit in XP e ho provato a collegarmi al mio SID DB "XE". Ma la connessione non è riuscita con il listener di errore ORA-12505 TNS al momento non è a conoscenza del SID fornito nel descrittore di connessione. Ero al corrente di come si è verificato questo problema poiché funzionava bene con l'utilità SQL e avevo anche creato alcuni mapping Informatica usando lo stesso. Ho cercato molto su questa roba qui e applicato i suggerimenti che mi sono stati offerti dopo aver eseguito il ping dello stato di "lsnrctl" sui forum pubblici, ma senza risultati. Tuttavia, questa mattina ho provato di nuovo a creare una nuova connessione, e Voila, ha funzionato senza problemi. Sto indovinando dopo aver letto in alcuni post che a volte l'ascoltatore ascolta prima che il DB si colleghi o qualcosa del genere (scusatemi per il mio rozzo riferimento dato che sono un novizio qui) ma suggerisco di riavviare semplicemente la macchina e ricontrollare.


2

Ho avuto lo stesso problema, quindi per risolvere questo problema ho prima riconfigurato il mio listener usando netcadopo che ho cancellato il mio vecchio database che era ORCL usando dbcae poi ho creato di nuovo il nuovo database usandodbca


2

Ho riscontrato lo stesso problema e risolto riavviando il servizio OracleServiceXE. Vai a Services.msc e verifica che il servizio "OracleServiceXE" sia ATTIVO e in esecuzione


2

Ho risolto questo problema modificando " SID " in " SERVICE_NAME " nel mio file TNSNAMES.ora.

Verifica se il tuo DB richiede SID o SERVICE_NAME.

Saluti


2

Se usi Oracle Express Edition, dovresti avere questo URL

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

Ho avuto un problema simile con il plug-in di configurazione liquibase in pom.xml. E ho cambiato la mia configurazione:

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

2

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

Errore che ho ricevuto:

java.sql.SQLException: il listener ha rifiutato la connessione con il seguente errore: ORA-12505, TNS: il listener attualmente non è a conoscenza del SID fornito nel descrittore di connessione Il descrittore di connessione utilizzato dal client era: localhost: 1521: xe

Come l'ho risolto:

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

(Rimuovi @)

Non so perché, ma ora funziona ...


1

Controllare eseguendo tnsping e il nome dell'istanza nella macchina host. Ti darà la descrizione del tns e la maggior parte delle volte il nome host è diverso e non corrisponde.

Risolvo il mio problema allo stesso modo

Nella macchina Unix $ tnsping (Invio)

Mi dà la descrizione completa di tns dove ho scoperto che il nome host è diverso .. :)


1

Controlla entrambi OracleServiceXEe OracleXETNSListeneravere lo stato avviato durante la navigazione start->run->services.msc.

Solo per il mio caso è OracleXETNSListenerstato avviato ma OracleServiceXEnon è stato avviato, quando ho iniziato right clicking -> starte verificato la connessione che funziona per me


1

Ho avuto un problema simile in SQL Workbench.

URL:

jdbc: oracle: thin: @ 111.111.111.111: 1111: xe

non funziona

URL:

jdbc: oracle: thin: @ 111.111.111.111: 1111: asdb

lavori.

Questo mi aiuta nella mia situazione concreta. Temo che potrebbero esistere molte altre ragioni con soluzioni diverse.


0

Ha avuto un problema simile. Il problema è iniziato all'improvviso: abbiamo un URL di connessione al database con bilanciamento del carico, ma nelle connessioni jdbc puntavo direttamente a un singolo db.

Modificato per caricare l'URL db bilanciato e ha funzionato.


2
Ti consigliamo di utilizzare l'URL della stringa di connessione completo come mostrato jdbc: oracle: thin: @ (DESCRIPTION = (ADDRESS = (HDR = myhost) (PORT = 1521) (PROTOCOL = tcp)) (CONNECT_DATA = (SERVICE_NAME = myorcldbservicename)))
Nirmala,

0

Nel mio caso non funzionava, finalmente ho riavviato il mio oracolo e l'ascoltatore di TNS e tutto ha funzionato. Stava lottando per 2 giorni.


0

Ho ricevuto questo errore ORA-12505, TNS: il listener attualmente non è a conoscenza del SID fornito nel descrittore di connessione quando ho provato a connettermi al DB Oracle utilizzando lo sviluppatore SQL.

La stringa JDBC utilizzata era jdbc: oracle: thin: @myserver: 1521 / XE , ovviamente quello corretto e i due servizi Oracle obbligatori OracleServiceXE, OracleXETNSListener erano attivi e funzionanti .

Il modo in cui ho risolto questo problema (in 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.

0

Oltre ai servizi in esecuzione (OracleServiceXE, OracleXETNSListener) è possibile che il software / firewall antivirus li blocchi ancora. Assicurati solo che non siano bloccati.inserisci qui la descrizione dell'immagine



0

Il mio oracolo ha smesso di funzionare e ho riscontrato questo errore. Ho riavviato la mia macchina e ho provato anche sopra le soluzioni. Alla fine, ho aperto i servizi componenti e riavviato i servizi Oracle e tutto ha iniziato a funzionare. Spero che questo aiuti qualcuno.


0

Stavo solo creando il link al database in modo errato.

La semplice soluzione per me era semplicemente cambiare "SID" in 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))
)';

Mutevole

SID=theNameOfTheDatabase

per

SERVICE_NAME=theNameOfTheDatabase 

risolto il mio problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.