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-12505
indica 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-password
con 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.)