Jest kilka rzeczy, które mogą powodować ten problem, ale zanim zaczniesz korzystać z JDBC, musisz się upewnić, że możesz połączyć się z bazą danych za pomocą SQL * Plus. Jeśli nie znasz SQL * Plus, jest to narzędzie wiersza poleceń do łączenia się z bazami danych Oracle, które od dawna jest standardową częścią Oracle i jest dołączone do Oracle XE.
Podczas łączenia się z bazą danych Oracle za pomocą JDBC nie łączy się bezpośrednio z bazą danych. Zamiast tego łączysz się z odbiornikiem TNS, który następnie łączy Cię z bazą danych. Błąd ORA-12505
oznacza, że odbiornik był włączony i można było się z nim połączyć, ale nie mógł on połączyć się z bazą danych, ponieważ nie wie, że ta baza danych działa. Są ku temu dwa powody:
- baza danych nie została uruchomiona,
- baza danych nie została zarejestrowana w nasłuchiwaniu, np. dlatego, że baza danych została uruchomiona przed odbiornikiem. (Po uruchomieniu baza danych rejestruje się u nasłuchiwania, jeśli jest już uruchomiona. Jeśli słuchacz nie jest uruchomiony, baza danych nie rejestruje się, a jeśli nasłuchujący uruchamia się, nie szuka baz danych, które mogłyby zarejestruj się w nim.)
ORA-12505 oznacza, że słuchacz wie o tej bazie danych, ale słuchacz nie otrzymał powiadomienia z bazy danych, że baza danych działa. (Jeśli próbujesz połączyć się z niewłaściwą bazą danych, używając niewłaściwego identyfikatora SID, otrzymasz błąd ORA-12154 „TNS: nie można rozwiązać określonego identyfikatora połączenia”).
Jakie usługi Oracle są uruchomione w przystawce Usługi? (Otwórz to z Panelu sterowania> Narzędzia administracyjne> Usługi lub po prostu Start> Uruchom>services.msc
.) Potrzebujesz usług OracleServiceXE i OracleXETNSListener do działania.
Jeśli obie usługi zostały uruchomione, czy możesz połączyć się z bazą danych w programie SQL * Plus za pomocą dowolnego z poniższych poleceń w wierszu polecenia? (Zakładam, że uruchamiasz je na komputerze, na którym zainstalowałeś Oracle XE).
sqlplus hasło systemowe / systemowe @XE
system sqlplus /systemowe
sqlplus / jako sysdba
(Zastąpić system-password
hasłem ustawionym dla użytkowników SYS i SYSTEM podczas instalacji Oracle XE).
Pierwsza z tych trzech łączy się przez nasłuchiwanie TNS, ale dwie pozostałe łączą się bezpośrednio z bazą danych bez przechodzenia przez nasłuchiwanie i działają tylko wtedy, gdy jesteś na tym samym komputerze co baza danych. Jeśli pierwszy z nich zawiedzie, ale pozostałe dwa się powiodą, połączenia JDBC również nie powiodą się. Jeśli tak, połącz się z bazą danych przy użyciu jednego z dwóch pozostałych i uruchomALTER SYSTEM REGISTER
. Następnie wyjdź z SQL * Plus i wypróbuj ponownie pierwszy formularz.
Jeśli trzecia nie działa, ale druga działa, dodaj swoje konto użytkownika do grupy ora_dba. Zrób to w Panelu sterowania> Zarządzanie komputerem> Lokalni użytkownicy i grupy.
Gdy już możesz uzyskać połączenia z formularza
sqlplus hasło systemowe / systemowe @XE
do pracy, powinieneś mieć możliwość połączenia się z Oracle XE przez JDBC. (Nawiasem mówiąc, nie pokazałeś nam kodu JDBC, którego używasz do łączenia się z bazą danych, ale podejrzewam, że jest on całkiem prawdopodobnie poprawny; byłoby wiele innych błędów, gdyby części parametrów połączenia były nieprawidłowe.)