ORA-12505, TNS: il listener non conosce al momento il SID indicato nel descrittore di connessione

Ho installato Oracle 11g Express Edition Release 2 nel mio sistema operativo Windows 7 64 bit e ho provato ad 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.(PhysicalConnection.java:531) at oracle.jdbc.driver.T4CConnection.(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 

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 1521 e XE dovrebbe essere un / )

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

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 si ha familiarità con SQL * Plus, si tratta di uno strumento da riga di comando per la connessione a database Oracle che è stato una parte standard di Oracle per un lungo periodo ed è incluso in Oracle XE.

Quando ci si connette a un database Oracle utilizzando JDBC, non si effettua la connessione diretta al database. Invece, ci si connette a un listener TNS, che quindi si collega al database. L’errore ORA-12505 indica che il listener era attivo e che era ansible connettersi ad esso, ma 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 l’ascoltatore, ad esempio perché il database è stato avviato prima del listener. (Quando il database si avvia, si registra con un listener se è già in esecuzione. Se il listener non è in esecuzione, il database non si registra e se il listener si avvia, non va in cerca di database che potrebbero registrarsi con esso.)

ORA-12505 significa che l’ascoltatore conosce quel database, ma il listener non ha ricevuto una notifica dal database che il database è attivo. (Se si stava tentando di connettersi al database sbagliato, utilizzando il SID errato, si otterrebbe un errore ORA-12154 “TNS: imansible risolvere l’identificativo di connessione specificato”.)

Quali servizi Oracle sono in esecuzione nello snap-in Servizi? (Apri dal Pannello di controllo> Strumenti di amministrazione> Servizi, o solo Start> Esegui> services.msc .) È necessario che i servizi OracleServiceXE e OracleXETNSListener siano in esecuzione.

Se i servizi sono stati entrambi avviati, è ansible connettersi al database in SQL * Plus utilizzando uno dei seguenti comandi al prompt dei comandi? (Suppongo che tu stia eseguendo questi sul computer su cui hai installato Oracle XE.)

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

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

Il primo di questi tre si connette tramite il listener TNS, ma i secondi due si collegano direttamente al database senza passare per il listener e funzionano solo se si è sulla stessa macchina del database. Se il primo fallisce ma gli altri due riescono, allora 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 provare nuovamente il primo modulo.

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

Una volta che puoi ottenere i collegamenti del modulo

  sqlplus system / system-password @XE 

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

Anch’io ho avuto lo stesso errore, ma quando ho provato tutti e tre hanno fallito. Se i tre precedenti falliscono. Prova lo stato di LSNRCTL se trovi il servizio (XE nel mio caso) mancante prova questo sqlplus /nolog conn system ... password ... connected. alter system register;
exit
lsnrctl stat
...
sqlplus /nolog conn system ... password ... connected. alter system register;
exit
lsnrctl stat
...

Ora puoi vedere il servizio
Anche se non vedi, prova questo fuori
sqlplus /nolog
conn system
... password ... connected.
alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope = both;
... system altered ...
alter system register;
exit
lsnrctl stat

Questo probabilmente dovrebbe funzionare …

Quando ricevi questo errore “ORA-12505, TNS: il listener non conosce al momento il SID dato nel descrittore di connessione”

Soluzione: aprire Servizi e avviare OracleServiceXE , quindi provare a connettersi …

Ho trovato alcune ragioni per questa eccezione

1) Il nome del database XE di default. Quindi l’url sarà ” jdbc: oracle: thin: @localhost: 1521: XE “.

2) Assicurati che OracleServiceXE, OracleXETNSListener sia running.it sarà in Pannello di controllo \ Tutti gli elementi del Pannello di controllo \ Strumenti di amministrazione \ Servizi

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 in quanto il nome SID era sbagliato.

Il mio problema è risolto quando utilizzo il codice seguente:

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

Di fronte a errore simile, nessuna delle soluzioni di cui sopra non ha aiutato. Si è verificato un problema nel file listner.ora. Per errore ho aggiunto SID al SID_LIST vedi 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) 

Fermato e il database inserisci la descrizione dell'immagine qui

Arrestato manualmente gli ascoltatori OracleServiceXE e OracleXETNSListener poiché non si arrestava automaticamente andando in Pannello di controllo \ Tutti gli elementi del Pannello di controllo \ Strumenti di amministrazione \ Servizi. Riavviato il database e ha funzionato come un fascino.

inizialmente sono venuto qui con lo stesso problema. Avevo già installato Oracle 12c su Windows 8 (64-bit), ma da allora ho risolto con ‘TNSPING xe’ sulla riga di comando … Se la connessione non è stabilita o il nome non è stato trovato, prova il nome del database, nel mio caso era ‘orcl’ … ‘TNSPING orcl’ di nuovo e se ping correttamente allora è necessario cambiare il SID in ‘orcl’ in questo caso (o qualsiasi nome di database usato) …

Una possibilità che non ho visto ampiamente discusso è che potrebbe esserci un problema nel risolvere il nome host sulla macchina host stessa. Se non ci sono voci per $ (nome host) in / etc / hosts, il listener Oracle viene confuso e non viene 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.

Oracle: syntax del nome del servizio in stile sottile

I nomi di servizio in stile sottile sono supportati solo dal driver JDBC Thin. La syntax è:

@ // nome_host: numero_porta / nome_servizio

http://docs.oracle.com/cd/B28359_01/java.111/b31224/urls.htm#BEIDHCBA

Anch’io ho affrontato lo stesso problema. Avevo installato Oracle Express Edition 10g in Windows XP OS usando VMware e funzionava perfettamente. Poiché è stato molto difficile digitare le query SQL nell’utilità SQL fornita da 10g e poiché ero abituato a lavorare con lo sviluppatore SQL, ho installato lo sviluppatore SQL a 32 bit in XP e ho provato a connettermi al mio DB SID “XE”. Ma la connessione non è riuscita con errore: il listener TNS ORA-12505 non conosce al momento il SID indicato nel descrittore di connessione. Ero a conoscenza di come si è verificato questo problema poiché funzionava perfettamente con l’utilità SQL e avevo anche creato alcuni mapping di Informatica utilizzando lo stesso. Ho navigato molto su questa roba e ho applicato i suggerimenti che mi sono stati offerti dopo aver eseguito il ping dello stato di “lsnrctl” nei forum pubblici, ma senza risultato. Tuttavia, stamattina ho provato di nuovo a creare una nuova connessione, e Voila, ha funzionato senza problemi. Sto indovinando dopo aver letto in pochi post che a volte l’ascoltatore ascolta prima che il DB si connetta o qualcosa (scusami per il mio rozzo riferimento dato che sono un principiante qui) ma ti suggerisco di riavviare la macchina e ricontrollare.

Ho avuto lo stesso problema quindi per risolvere questo problema, prima riconfigurare il mio listener usando netca dopo aver eliminato il mio vecchio database che era ORCL usando dbca e poi ho creato nuovamente il nuovo database usando dbca

Ho affrontato lo stesso problema e risolto riavviando il servizio OracleServiceXE. Goto Services.msc e quindi verificare che il servizio ‘OracleServiceXE’ sia attivo e in esecuzione

Controllare eseguendo tnsping e nome di istanza nella macchina host. Fornirà la descrizione tns e il nome host per la maggior parte del tempo è diverso e non corrisponde.

Risolvo il mio problema allo stesso modo

In macchina Unix $ tnsping (Invio)

Mi dà una descrizione completa in cui ho trovato che il nome host è diverso .. 🙂

Ho avuto lo stesso problema improvvisamente dopo aver incasinato qualche cmd. Ho scoperto che il servizio ORACLE XE aveva smesso di funzionare. Mi ci sono voluti 2 secondi per riavviarlo dagli strumenti di amministrazione. tnx!

Si prega di controllare sia OracleServiceXE che OracleXETNSListener con lo stato avviato quando si naviga attraverso start->run->services.msc .

Per il mio caso è stato avviato solo OracleXETNSListener ma OracleServiceXE non è stato avviato, quando ho iniziato facendo right clicking -> start e verifica che la connessione OracleServiceXE per me

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

Controlla se il tuo DB richiede SID o SERVICE_NAME.

Saluti

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. Ho paura, potrebbe esistere molte altre ragioni con soluzioni diverse.

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 plugin di configurazione di liquibase in pom.xml. E ho cambiato la mia configurazione:

 ` oracle.jdbc.OracleDriver jdbc:oracle:thin:@localhost:1521:xe  **** **** ` 

Aveva un problema simile. Il problema si è verificato all’improvviso: stiamo eseguendo il caricamento dell’URL della connessione al database, ma nelle connessioni jdbc stavo puntando direttamente a un singolo db.

Cambiato per caricare l’URL db bilanciato e ha funzionato.

Nel mio caso non stava funzionando, finalmente ho riavviato il mio oracle e l’ascoltatore di TNS e tutto ha funzionato. Stavo lottando per 2 giorni.

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

Errore che ho ricevuto:

java.sql.SQLException: Listener ha rifiutato la connessione con il seguente errore: ORA-12505, TNS: il listener al momento non conosce il SID indicato 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 sta funzionando ora …