Es gibt einige Dinge, die dieses Problem verursachen können. Bevor Sie jedoch mit JDBC beginnen, müssen Sie sicherstellen, dass Sie mit SQL * Plus eine Verbindung zur Datenbank herstellen können. Wenn Sie mit SQL * Plus nicht vertraut sind, handelt es sich um ein Befehlszeilentool für die Verbindung mit Oracle-Datenbanken, das seit langem ein Standardbestandteil von Oracle ist und in Oracle XE enthalten ist.
Wenn Sie mit JDBC eine Verbindung zu einer Oracle-Datenbank herstellen, stellen Sie keine direkte Verbindung zur Datenbank her. Stattdessen stellen Sie eine Verbindung zu einem TNS-Listener her, der Sie dann mit der Datenbank verbindet. Der Fehler ORA-12505
bedeutet, dass der Listener aktiv war und Sie eine Verbindung herstellen konnten, Sie jedoch keine Verbindung zur Datenbank herstellen konnten, da er nicht weiß, dass diese Datenbank aktiv ist. Dafür gibt es zwei Gründe:
- Die Datenbank wurde nicht gestartet.
- Die Datenbank hat sich nicht beim Listener registriert, z. B. weil die Datenbank vor dem Listener gestartet wurde. (Wenn die Datenbank gestartet wird, registriert sie sich bei einem Listener, wenn sie bereits ausgeführt wird. Wenn der Listener nicht ausgeführt wird, registriert sich die Datenbank nicht selbst, und wenn der Listener gestartet wird, sucht er nicht nach Datenbanken, die dies möglicherweise tun registriere dich damit.)
ORA-12505 bedeutet, dass der Listener über diese Datenbank Bescheid weiß, der Listener jedoch keine Benachrichtigung von der Datenbank erhalten hat, dass die Datenbank aktiv ist. (Wenn Sie versuchen, mit der falschen SID eine Verbindung zur falschen Datenbank herzustellen, wird der ORA-12154-Fehler "TNS: Die angegebene Verbindungskennung konnte nicht aufgelöst werden" angezeigt.)
Welche Oracle-Services werden im Services-Snap-In ausgeführt? (Öffnen Sie diese über Systemsteuerung> Verwaltung> Dienste oder starten services.msc
Sie einfach> Ausführen> .) Sie müssen die Dienste OracleServiceXE und OracleXETNSListener ausführen.
Wenn beide Dienste gestartet wurden, können Sie an einer Eingabeaufforderung eine der folgenden Verbindungen zur Datenbank in SQL * Plus herstellen? (Ich gehe davon aus, dass Sie diese auf dem Computer ausführen, auf dem Sie Oracle XE installiert haben.)
sqlplus system / system-password @XE
sqlplus system / system-password
sqlplus / as sysdba
(Ersetzen Sie system-password
das Kennwort, das Sie während der Oracle XE-Installation für die Benutzer SYS und SYSTEM festgelegt haben.)
Die erste dieser drei Verbindungen wird über den TNS-Listener hergestellt, die zweiten beiden stellen jedoch eine direkte Verbindung zur Datenbank her, ohne über den Listener zu gehen, und funktionieren nur, wenn Sie sich auf demselben Computer wie die Datenbank befinden. Wenn die erste fehlschlägt, die anderen beiden jedoch erfolgreich sind, schlagen auch JDBC-Verbindungen fehl. Wenn ja, stellen Sie mit einer der beiden anderen eine Verbindung zur Datenbank her und führen Sie sie aus ALTER SYSTEM REGISTER
. Beenden Sie dann SQL * Plus und versuchen Sie das erste Formular erneut.
Wenn der dritte fehlschlägt, der zweite jedoch funktioniert, fügen Sie Ihr Benutzerkonto der Gruppe ora_dba hinzu. Führen Sie dies unter Systemsteuerung> Computerverwaltung> Lokale Benutzer und Gruppen aus.
Sobald Sie Verbindungen des Formulars erhalten können
sqlplus system / system-password @XE
Damit dies funktioniert, sollten Sie über JDBC eine Verbindung zu Oracle XE herstellen können. (Übrigens haben Sie uns den JDBC-Code, mit dem Sie eine Verbindung zur Datenbank herstellen, nicht angezeigt, aber ich würde vermuten, dass er sehr wahrscheinlich korrekt ist. Wenn Teile der Verbindungszeichenfolge falsch wären, würden verschiedene andere Fehler auftreten.)