Mamy aplikację działającą lokalnie, w której występuje następujący błąd:
ORA-12514: TNS: nasłuchujący nie zna obecnie usługi żądanej w deskryptorze połączenia
Przetestowałem połączenie przy użyciu TNSPing
poprawnie rozwiązanego i próbowałem SQLPlus
nawiązać połączenie, które zakończyło się niepowodzeniem z takim samym błędem jak powyżej. Użyłem tej składni do SQLPlus
:
sqlplus username/password@addressname[or host name]
Sprawdziliśmy, że:
- nasłuchiwanie TNS na serwerze jest uruchomione.
- Oracle sama na serwerze jest uruchomiona.
Nie znamy żadnych zmian, które zostały wprowadzone w tym środowisku. Coś jeszcze możemy przetestować?
Odpowiedzi:
Miałem ten problem i poprawka polegała na upewnieniu się, że w
tnsnames.ora
bazie danychSERVICE_NAME
znajduje się poprawna nazwa usługi. Aby znaleźć prawidłowe nazwy usług, możesz użyć następującego zapytania w Oracle:Po zaktualizowaniu
tnsnames.ora
do:potem pobiegłem:
Sukces! Słuchacz mówi w zasadzie, że jakakolwiek nazwa usługi nie jest prawidłową usługą według DB.
(* Uruchomiłem sqlplus ze stacji roboczej klienta Win7 do zdalnej bazy danych i obwiniam DBA;) *)
źródło
Wiem, że to stare pytanie, ale wciąż bez odpowiedzi. Zajęło mi to dzień badań, ale znalazłem najprostsze rozwiązanie, przynajmniej w moim przypadku (Oracle 11.2 w systemie Windows 2008 R2) i chciałem się nim podzielić.
Błąd, jeśli spojrzeć bezpośrednio, wskazuje, że detektor nie rozpoznaje nazwy usługi. Ale gdzie przechowuje nazwy usług? W
%ORACLE_HOME%\NETWORK\ADMIN\listener.ora
„SID_LIST” to po prostu lista identyfikatorów SID i nazw usług sparowanych w formacie, który można skopiować lub wyszukać.
Dodałem problem Nazwa usługi, a następnie w panelu sterowania „Usługi” systemu Windows wykonałem „Uruchom ponownie” w usłudze nasłuchiwania Oracle. Teraz wszystko jest dobrze.
Na przykład plik listener.ora może początkowo wyglądać następująco:
... Aby rozpoznawać nazwę usługi
orcl
, możesz zmienić ją na:źródło
listener.ora
przechowywania nazw. Nie mam nawetlistener.ora
pliku. Jestem także na klienckiej stacji roboczej z programem SQL Developer i próbuję utworzyć łącze do bazy danych, gdy pojawi się błąd. Nie mam usługi Oracle Listener do ponownego uruchomienia.Miałem ten problem na Windows Server 2008 R2 i Oracle 11g
Jeśli nie masz żadnego wpisu dotyczącego usług bazodanowych, utwórz go i ustaw poprawną globalną bazę danych
sid
oraz oracle home.źródło
W moich okolicznościach błąd był spowodowany faktem, że słuchacz nie zarejestrował usługi db. Rozwiązałem to, rejestrując usługi. Przykład:
Mój deskryptor w
tnsnames.ora
:Tak więc przystępuję do
listener.ora
ręcznej rejestracji usługi :Na koniec uruchom ponownie nasłuchiwanie za pomocą polecenia:
Gotowe!
źródło
Uruchomienie OracleServiceXXX z services.msc działało dla mnie w systemie Windows.
źródło
To naprawdę powinien być komentarz do odpowiedzi Brada Rippe'a , ale niestety, za mało przedstawicieli. Ta odpowiedź zapewniła mi 90% drogi. W moim przypadku instalacja i konfiguracja baz danych umieściły wpisy w pliku tnsnames.ora dla baz danych, które uruchomiłem. Po pierwsze, udało mi się połączyć z bazą danych, ustawiając zmienne środowiskowe (Windows):
a następnie połączenie za pomocą
Następnie uruchom polecenie z odpowiedzi Brada Rippe'a:
pokazał, że nazwy nie pasują dokładnie. Wpisy utworzone za pomocą Asystenta konfiguracji bazy danych Oracle, w których pierwotnie:
Nazwa usługi z zapytania była po prostu
mydatabase
zamiastmydatabase.mydomain.com
. Edytowałem plik tnsnames.ora tylko do nazwy podstawowej bez części domeny, więc wyglądały tak:Zrestartowałem usługę nasłuchiwania TNS (często używam
lsnrctl stop
ilsnrctl start
z okna poleceń administratora [lub Windows Powershell] zamiast z panelu sterowania usług, ale oba działają.) Potem mogłem się połączyć.źródło
Miałem ten sam problem. Dla mnie tylko pisanie
wykonał lewę, dzięki czemu łączę się z domyślną nazwą usługi, tak myślę.
źródło
jdbc:oracle:thin:@//localhost:1521/orcl
. Ciąg połączenia skorygowane w celu wyeliminowania tego błędu było:jdbc:oracle:thin:@localhost:1521
.to, co zadziałało, było naprawdę proste, wystarczyło zainicjować usługę ręcznie w „Usługach systemu Windows” (services.msc w cmd trompt). moja nazwa usługi to: OracleServiceXXXXX.
źródło
Sprawdź, czy baza danych jest uruchomiona. Zaloguj się do serwera, ustaw zmienną środowiskową ORACLE_SID na SID bazy danych i uruchom SQL * Plus jako połączenie lokalne.
źródło
Ten błąd może wystąpić, gdy aplikacja nawiąże nowe połączenie dla każdej interakcji z bazą danych lub połączenia nie zostaną poprawnie zamknięte. Jednym z bezpłatnych narzędzi do monitorowania i potwierdzania tego jest programista Oracle Sql (chociaż nie jest to jedyne narzędzie, którego można używać do monitorowania sesji DB).
możesz pobrać narzędzie ze strony Oracle Sql Developer
Oto zrzut ekranu, jak monitorować twoje sesje. (jeśli widzisz, że podczas sesji pojawia się wiele sesji użytkownika aplikacji, gdy widzisz błąd ORA-12514, oznacza to, że możesz mieć problem z pulą połączeń).
źródło
Rozwiązałem ten problem w moim środowisku Linuksa, aktualizując adres IP mojego komputera w pliku / etc / hosts.
Możesz zweryfikować adres IP swojej sieci (koniec inet.) Za pomocą:
Sprawdź, czy Twój adres IP pasuje do pliku / etc / hosts:
Zmodyfikuj plik / etc / hosts, jeśli jest potrzebny:
PA.
źródło
Dla tych, którzy mogą uruchamiać Oracle na maszynie wirtualnej (jak ja), zauważyłem ten problem, ponieważ w mojej maszynie wirtualnej zabrakło pamięci, co prawdopodobnie uniemożliwiło prawidłowe uruchomienie / uruchomienie OracleDB. Zwiększenie pamięci VM i ponowne uruchomienie rozwiązało problem.
źródło
Tutaj jest wiele odpowiedzi, ale oto działający przykład z kodem, który można skopiować, wkleić i przetestować natychmiast:
Dla mnie błąd 12514 został rozwiązany po określeniu poprawnej usługi SERVICE_NAME. Znajdziesz go na serwerze w pliku,
tnsnames.ora
który zawiera 3 predefiniowane nazwy usług (jedną z nich jest „XE”).HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.112.4.0\DllPath
. Na maszynach 64-bitowych pisz dodatkowo doHKLM\SOFTWARE\Wow6432Node\Oracle\...
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.121.2.0\DllPath
Oracle.ManagedDataAccess.dll
tylko 4 MB i jest to czysta zarządzana biblioteka DLL działająca w procesach 32-bitowych i 64-bitowych i zależy od żadnej innej biblioteki DLL i nie wymaga żadnych wpisów rejestru.Jeśli
SERVICE_NAME=XE
jest źle, pojawia się błąd 12514. JestSERVICE_NAME
to opcjonalne. Możesz też to zostawić.źródło
Miałem również ten sam problem i spędziłem 3 dni, aby go wykopać.
Dzieje się tak z powodu nieprawidłowego wpisu usługi TNS.
Najpierw sprawdź, czy możesz połączyć się z rezerwową bazą danych z podstawowej bazy danych za pomocą sql>
sqlplus sys@orastand as sysdba
(orastand
jest rezerwową bazą danych).Jeśli nie możesz się połączyć, jest to problem z usługą. Popraw wpis nazwy usługi w pliku TNS na głównym końcu.
Sprawdź rezerwową bazę danych w ten sam sposób. W razie potrzeby wprowadź również zmiany tutaj.
Upewnij się, że
log_archive_dest_2
parametr ma poprawną nazwę usługi.źródło
Wystąpił ten sam błąd, ponieważ podany zdalny identyfikator SID był nieprawidłowy:
Zapytałem o bazę danych systemu:
wybierz * z global_name;
i znalazłem mój zdalny SID („XE”).
Wtedy mógłbym połączyć się bez problemu.
źródło
W moim przypadku w bazie danych zabrakło miejsca na dysku. Co spowodowało, że nie zareagował. Po wyjaśnieniu tego problemu wszystko znów działało.
źródło
Dla mnie było to spowodowane użyciem dynamicznego iPada podczas instalacji. Ponownie zainstalowałem Oracle za pomocą statycznego ipadress, a potem wszystko było w porządku
źródło
Ponowne uruchomienie maszyny wirtualnej działało dla mnie
źródło
Mój problem został rozwiązany przez zastąpienie „SID” w adresie URL „nazwą usługi” i poprawnym hostem.
źródło
tnslsnr
jest włączony, ale baza danych nie działa.Dla początkujących Oracle nie jest oczywiste, że baza danych może nie działać, a połączenia są akceptowane.
Musiałem ręcznie uruchomić bazę danych w ten sposób
A potem w konsoli SQL
W moim przypadku nie udało mi się uruchomić, ale dostałem inny komunikat o błędzie i znalazłem źródło problemu - musiałem zmienić nazwę hosta, a następnie automatyczne uruchomienie bazy danych znów działało.
źródło
W celu rozwiązania tego problemu wdrożyłem poniższe obejście.
Ustawiłem ORACLE_HOME za pomocą wiersza polecenia (kliknij prawym przyciskiem myszy cmd.exe i uruchom jako administrator systemu).
Używane poniżej polecenia
set oracle_home="path to the oracle home"
Przejdź do Wszystkie programy -> Oracle -ora home1 -> Narzędzia do migracji konfiguracji -> Net Manager -> Słuchacz
Wybierz Usługi baz danych z menu rozwijanego. Zarówno nazwa globalnej bazy danych, jak i identyfikator SID są ustawione na takie same (w moim przypadku ORCL). Ustaw katalog domowy Oracle.
Przykład okna Oracle Net Manager z dokumentacji Oracle:
źródło
Problem polegał na tym, że mój adres URL ciągu połączenia zawierał nazwę bazy danych zamiast identyfikatora SID. Zastąpienie nazwy bazy danych identyfikatorem SID połączenia z bazą danych Oracle rozwiązało ten problem.
Aby poznać SID swojego wyroczni, możesz przejrzeć
tnsnames.ora
plik.XE
był faktycznym identyfikatorem SID, więc tak wygląda teraz mój ciąg połączenia tomcat:Moja wersja serwera to „Oracle 11.2 Express”, ale rozwiązanie powinno działać również na innych wersjach.
źródło
W moim przypadku brakowało okrągłych nawiasów wokół usługi SERVICE_NAME w pliku tnsnames.ora .
źródło
Dla tych, którzy używają spring-boot i jdbc do połączenia. Musisz zachować ostrożność pisząc jdbcUrl w application.properties
Z SID w połączeniu z bazą danych -
source.datasource.jdbcUrl = jdbc:oracle:thin:@[HOST][:PORT]:SID
Z nazwą usługi w połączeniu db
globe.datasource.jdbcUrl = jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
To zadziałało dla mnie :)
źródło