Zainstalowałem Oracle 11g Express Edition Release 2 w moim 64-bitowym systemie operacyjnym Windows 7 i próbowałem uruchomić program JDBC, po czym pojawił się następujący błąd:
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
Odpowiedzi:
Rozwiązałem ten problem, poprawiając mój ciąg jdbc.
Na przykład prawidłowy ciąg jdbc powinien mieć postać ...
Ale ciąg jdbs, którego używałem, to ...
(Uwaga: pomiędzy
1521
aXE
powinno być a/
)Ten zły ciąg jdbc również powoduje błąd ORA-12505.
źródło
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: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).
(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 uruchom
ALTER 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
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.)
źródło
SP2-0734: unknown command beginning "system/ora..." - rest of line ignored.
na wszystkich 3system/ora...
(lub SQL * Plus przeczytał tę linię z pliku, który kazałeś mu przeczytać). Wiersze poleceń, które podałem powyżej, mają być używane z okna wiersza polecenia / powłoki / terminala. Jeśli jesteś już uruchomiony SQL * Plus, wymienićsqlplus
zconnect
.Ja też dostałem ten sam błąd, ale kiedy spróbowałem, wszystkie trzy zawiodły. Jeśli powyższe trzy zawiodą, wypróbuj status LSNRCTL, jeśli znajdziesz usługę (w moim przypadku XE), spróbuj tego
Teraz możesz zobaczyć usługę,
nawet jeśli jej nie widzisz, wypróbuj ją
To prawdopodobnie powinno zadziałać ...
źródło
local_listener
odbiornika orcl jest teraz wyświetlany wlsnrctl
. Stukrotne dzięki!ORA-65040: operation not allowed from within a pluggable database
co to znaczy? Nie można skonfigurować JDBC: /alter system set local_listener = ...
pracował dla mnie.Gdy pojawia się ten błąd „ORA-12505, TNS: słuchacz nie wie obecnie o identyfikatorze SID podanym w deskryptorze połączenia”
Rozwiązanie: Otwórz usługi i zacznij
OracleServiceXE
, a następnie spróbuj się połączyć ...źródło
Znalazłem kilka powodów tego wyjątku. One są
1) Domyślna nazwa bazy danych XE. Dlatego adres URL to „ jdbc: oracle: thin: @localhost: 1521: XE ”.
2) Upewnij się, że OracleServiceXE, OracleXETNSListener jest uruchomiony. Będzie w Panelu sterowania \ Wszystkie elementy Panelu sterowania \ Narzędzia administracyjne \ Usługi
źródło
Rozwiązałem ten problem, poprawiając mój kod JDBC.
poprawny ciąg JDBC powinien być ...
Ale ciąg JDBC, którego używałem, był ...
Tak więc błąd podania orcl zamiast xe pokazał ten błąd, ponieważ nazwa SID była błędna.
źródło
conection = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");
zadziałało.Mój problem został rozwiązany, gdy użyję poniższego kodu:
źródło
W obliczu podobnego błędu żadne z powyższych rozwiązań nie pomogło. Wystąpił problem w pliku listner.ora. Przez pomyłkę dodałem
SID
poza tym, coSID_LIST
widać poniżej (sekcja między gwiazdami *).Poprawiono ten błąd, jak poniżej:
Zatrzymano i baza danych
Zatrzymano programy nasłuchujące OracleServiceXE i OracleXETNSListener ręcznie, ponieważ nie zatrzymały się one automatycznie, przechodząc do Panel sterowania \ Wszystkie elementy panelu sterowania \ Narzędzia administracyjne \ Usługi. Zrestartowałem bazę danych i działała jak urok.
źródło
początkowo przyjechałem tutaj z tym samym problemem. Zainstalowałem jus Oracle 12c w systemie Windows 8 (64-bitowym), ale od tego czasu rozwiązałem to za pomocą `` TNSPING xe '' w wierszu poleceń ... Jeśli połączenie nie jest nawiązane lub nie znaleziono nazwy, wypróbuj nazwę bazy danych, w moim przypadku było to ponownie 'orcl' ... 'TNSPING orcl' i jeśli pingowanie zakończyło się pomyślnie, musisz zmienić SID na 'orcl' w tym przypadku (lub jakąkolwiek nazwę bazy danych, której używasz) ...
źródło
Jedną z możliwości, o której nie widziałem szeroko dyskutowanej, jest to, że może wystąpić problem z rozpoznaniem nazwy hosta na samym komputerze hosta. Jeśli nie ma wpisu dla $ (nazwa hosta) w / etc / hosts, słuchacz Oracle jest zdezorientowany i nie pojawia się.
Okazało się, że to mój problem, a dodanie nazwy hosta i adresu IP w / etc / hosts rozwiązało problem.
źródło
Oracle: cienka składnia nazwy usługi
Nazwy usług w stylu uproszczonym są obsługiwane tylko przez sterownik uproszczony JDBC. Składnia jest następująca:
@ // nazwa_hosta: numer_portu / nazwa_usługi
http://docs.oracle.com/cd/B28359_01/java.111/b31224/urls.htm#BEIDHCBA
źródło
Jeśli masz działające połączenie w programie Oracle SQL Developer, użyj informacji z menu połączenia, aby zbudować swój adres URL, jak opisano na poniższej ilustracji:
W powyższym przykładzie adres URL wyglądałby tak:
jdbc:oracle:thin:@ORADEV.myserver.com:1521/myservice
Zwróć uwagę, że jeśli używasz identyfikatora SID, to po nazwie hosta występuje dwukropek („:”) zamiast ukośnika („/”).
źródło
Ja też stanąłem przed tym samym problemem. Zainstalowałem Oracle Express Edition 10g w systemie operacyjnym Windows XP przy użyciu VMware i działało dobrze. Ponieważ pisanie zapytań SQL w narzędziu SQL dostarczonym przez 10g było bardzo niewygodne i ponieważ byłem przyzwyczajony do pracy z programistą SQL, zainstalowałem programistę SQL w wersji 32-bitowej w XP i próbowałem połączyć się z moim DB SID „XE”. Ale połączenie nie powiodło się z powodu błędu-ORA-12505 odbiornik TNS obecnie nie wie o identyfikatorze SID podanym w deskryptorze połączenia. Byłem na morzu, aby dowiedzieć się, jak pojawił się ten problem, ponieważ działało dobrze z narzędziem SQL, a także utworzyłem kilka mapowań Informatica przy użyciu tego samego. Dużo przeglądałem w tej sprawie i zastosowałem sugestie, które otrzymałem po sprawdzeniu statusu "lsnrctl" na publicznych forach, ale bezskutecznie. Jednak dziś rano ponownie spróbowałem utworzyć nowe połączenie, i Voila, działało bez problemów. Domyślam się po przeczytaniu w kilku postach, że czasami słuchacz nasłuchuje, zanim DB się połączy, czy coś (wybacz mi moje prymitywne odniesienie, ponieważ jestem tu nowicjuszem), ale sugeruję po prostu zrestartować maszynę i sprawdzić ponownie.
źródło
Miałem ten sam problem, więc aby rozwiązać ten problem, najpierw ponownie skonfigurowałem mój odbiornik za pomocą,
netca
po czym usunąłem moją starą bazę danych, która była ORCL, używając,dbca
a następnie ponownie utworzyłem nową bazę danych za pomocądbca
źródło
Napotkałem ten sam problem i rozwiązałem go, ponownie uruchamiając usługę OracleServiceXE. Przejdź do Services.msc, a następnie sprawdź, czy usługa „OracleServiceXE” działa i działa
źródło
Rozwiązałem ten problem, zmieniając „ SID ” na „ SERVICE_NAME ” ” w moim pliku TNSNAMES.ora.
Sprawdź, czy Twoja baza danych pyta o SID lub SERVICE_NAME.
Twoje zdrowie
źródło
Jeśli używasz Oracle Express Edition, powinieneś mieć ten adres URL
Miałem podobny problem z wtyczką konfiguracyjną liquibase w pom.xml. I zmieniłem konfigurację:
źródło
Connection con = DriverManager.getConnection ("jdbc: oracle: thin: @localhost: 1521: xe", "scott", "tiger");
Otrzymałem błąd:
java.sql.SQLException: Odbiornik odmówił połączenia z następującym błędem: ORA-12505, TNS: odbiornik nie zna obecnie identyfikatora SID podanego w deskryptorze połączenia Deskryptor połączenia używany przez klienta to: localhost: 1521: xe
Jak to rozwiązałem:
Connection con = DriverManager.getConnection ("jdbc: oracle: thin: localhost: 1521: xe", "scott", "tiger");
(Usuń @)
Nie wiem dlaczego, ale teraz działa ...
źródło
Sprawdź, wykonując tnsping i nazwę instancji na komputerze hosta. Poda ci opis tns i przez większość czasu nazwa hosta jest inna, co nie pasuje.
Rozwiązuję również mój problem
Na komputerze z systemem Unix $ tnsping (Enter)
Daje mi pełny opis tns, gdzie znalazłem, że nazwa hosta jest inna .. :)
źródło
Sprawdź oba
OracleServiceXE
i sprawdź, czyOracleXETNSListener
status został uruchomiony podczas nawigacjistart->run->services.msc
.W moim przypadku tylko
OracleXETNSListener
został uruchomiony, aleOracleServiceXE
nie został uruchomiony, kiedy zacząłem przezright clicking -> start
i sprawdziłem połączenie, czy działa dla mnieźródło
Miałem podobny problem w SQL Workbench.
URL:
jdbc: oracle: thin: @ 111.111.111.111: 1111: xe
nie działa.
URL:
jdbc: oracle: thin: @ 111.111.111.111: 1111: asdb
Pracuje.
To pomoże mi w mojej konkretnej sytuacji. Obawiam się, że przy innych rozwiązaniach mogłoby istnieć wiele innych powodów.
źródło
Miałem podobny problem. Problem zaczął pojawiać się nagle - mamy URL połączenia z bazą danych o zrównoważonym obciążeniu, ale w połączeniach jdbc wskazywałem bezpośrednio na pojedynczą bazę danych.
Zmieniono na zrównoważony adres URL db i zadziałało.
źródło
W moim przypadku nie wyszło, w końcu zrestartowałem mój oracle i słuchacz TNS i wszystko działało. Walczył przez 2 dni.
źródło
Otrzymałem ten błąd ORA-12505, TNS: słuchacz nie zna obecnie identyfikatora SID podanego w deskryptorze połączenia, gdy próbowałem połączyć się z Oracle DB za pomocą programisty SQL.
Użyty ciąg znaków JDBC to jdbc: oracle: thin: @myserver: 1521 / XE , oczywiście poprawny i dwie obowiązkowe usługi OracleServiceXE, OracleXETNSListener działały .
Sposób, w jaki rozwiązałem ten problem (w systemie Windows 10)
źródło
Oprócz uruchomionych usług (OracleServiceXE, OracleXETNSListener) istnieje szansa, że oprogramowanie antywirusowe / zapora ogniowa może je nadal blokować. Tylko upewnij się, że nie są zablokowane.
źródło
Właśnie to naprawiłem, ponownie uruchamiając / uruchamiając oracleService w usługach
źródło
Moja wyrocznia przestała działać i otrzymywałem ten błąd. Zrestartowałem komputer i wypróbowałem również powyższe rozwiązania. Ostatecznie otworzyłem usługi składowe i ponownie uruchomiłem usługi Oracle i wszystko zaczęło działać. Mam nadzieję, że to komuś pomoże.
źródło
Po prostu nieprawidłowo tworzyłem łącze do bazy danych.
Prostą poprawką dla mnie była po prostu zmiana „SID” na SERVICE_NAME
Wymiana pieniędzy
do
rozwiązał mój problem.
źródło