Odbiornik Oracle 11g nie działa z błędami ORA-12514 i ORA-12505

17

Na moim komputerze programistycznym uruchamiam instancję Oracle 11g lokalnie i mogę połączyć się z instancją lokalną bezpośrednio za pośrednictwem SqlPlus:

c:\>sqlplus ace

SQL*Plus: Release 11.2.0.2.0 Production on Mon Mar 11 11:50:20 2013

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Beta

SQL> select count(*) from my_table ;

  COUNT(*)
----------
      5297

Ale nie mogę się z nim połączyć przez odbiornik:

c:\>sqlplus -L "user/pw@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))"

SQL*Plus: Release 11.2.0.2.0 Production on Mon Mar 11 11:52:40 2013

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor


SP2-0751: Unable to connect to Oracle.  Exiting SQL*Plus

Podobnie, jeśli łączę się za pośrednictwem SqlDeveloper, pojawia się błąd (aczkolwiek ORA-12505, TNS:listener does not currently know of SID given in connect descriptor).

Ta instancja jest stabilna i działa dobrze przez rok lub dłużej do dziś, w poniedziałek rano. Nasze korporacyjne działy IT czasami wprowadzają nowe zasady i aktualizacje w weekend, więc zakładam, że coś się zmieniło, ale nie byłem w stanie ustalić, co.

Zrestartowałem usługę i słuchacza kilka razy, dziennik słuchacza nie daje żadnych wskazówek.

Słuchacz wydaje się w porządku:

c:\>lsnrctl status

LSNRCTL for 32-bit Windows: Version 11.2.0.2.0 - Beta on 11-MAR-2013 11:55:33

Copyright (c) 1991, 2010, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for 32-bit Windows: Version 11.2.0.2.0 - Beta
Start Date                11-MAR-2013 11:17:30
Uptime                    0 days 0 hr. 38 min. 3 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Default Service           XE
Listener Parameter File   C:\oraclexe\app\oracle\product\11.2.0\server\network\admin\listener.ora
Listener Log File         C:\oraclexe\app\oracle\diag\tnslsnr\FBC305BB46560\listener\alert\log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=machine.domain.com)(PORT=1521)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
  Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

Port 1521 wydaje się być w porządku:

c:\>netstat -an -O | find /i "1521"
  TCP    0.0.0.0:1521           0.0.0.0:0              LISTENING       4368
  TCP    169.243.90.109:55307   159.185.207.100:1521   ESTABLISHED     12416
  TCP    [::]:1521              [::]:0                 LISTENING       4368

(PID 4368 to proces TNSLSNR.exe.)

Mogę również tnspingdo usługi XE:

c:\>tnsping xe

TNS Ping Utility for 32-bit Windows: Version 11.2.0.2.0 - Beta on 11-MAR-2013 12:27:47

Copyright (c) 1997, 2010, Oracle.  All rights reserved.

Used parameter files:
C:\oraclexe\app\oracle\product\11.2.0\server\network\admin\sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = machine.domain.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))
OK (210 msec)

listenerr.oraPliku:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = machine.domain.com)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)

Ponadto i nie mam pojęcia, czy jest to powiązane, nie mogę uzyskać dostępu do wierzchołka https://127.0.0.1:8080/apex(chociaż uprawnienia do tego wydają się w porządku).

Gdzie jeszcze powinienem szukać?

Zaktualizuj z żądanymi informacjami:

SQL> show parameter service_names

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      XE
SQL> show parameter local_listener

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string

Update2 : jak słusznie wskazuje @ miracle173, słuchacz nie czuł się dobrze. Dzięki zaktualizowanemu parametrowi „local_listener” wyświetla teraz dodatkowe informacje:

Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=machine.domain.com)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
  Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "XEXDB" has 1 instance(s).
  Instance "xe", status READY, has 1 handler(s) for this service...
Service "xe" has 1 instance(s).
  Instance "xe", status READY, has 1 handler(s) for this service...
The command completed successfully
Nieskomplikowane
źródło
Jakie są wartości INSTANCE_NAMEparametru inicjalizacji i ORACLE_SIDzmiennej środowiskowej? Twoja baza danych nie rejestruje się z domyślnym nasłuchiwaniem z jakiegoś powodu. Spróbuj wydać, alter system register;a następnie ponownie połączyć się z bazą danych.
Yasir Arsanukaev
@YasirArsanukaev nazwa_instancji to „xe” (małe litery, jeśli jest to istotne) i nie mam zmiennej środowiskowej ORACLE_SID.
Nieskompletowany
3
dwie uwagi: „słuchacz wydaje się w porządku”: Nie sądzę, ponieważ nie wyświetla usługi o nazwie „XE” „Mogę pingować usługę XE”: tnsping łączy się ze słuchaczem, ale nie zawraca sobie głowy usługami. więc możesz pokazać tylko, czy detektor jest uruchomiony, ale nie możesz użyć ist do sprawdzenia, czy detektor zarejestrował usługę. Tak więc tnsping "(DESCRIPTION = (ADRES = (PROTOKÓŁ = TCP) (HOST = host lokalny) (PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))" powiedzie się, jeśli słuchacz działa na porcie 1521 hosta lokalnego, nawet jeśli usługa nie istnieje.
miracle173
Zetknąłem się dzisiaj z tym samym problemem i jak opisano w @ miracle173, w alert.log jest rejestracja. Oracle działa na maszynie wirtualnej. Okazuje się, że na maszynie wirtualnej zarówno nazwa hosta, jak i nazwa hosta.domain wszystkie wskazują na adres IP inny niż 127.0.0.1 (localhost). Po zmodyfikowaniu pliku hosts (Windows \ system32 \ drivers \ etc) w celu wymuszenia mapowania wszystko jest już w porządku.
rejestr zmian zmienił problem .. dzięki :)
użytkownik116258

Odpowiedzi:

15

Dzięki dzięki @YasirArsanukaevowi za poświęcony czas znalazłem rozwiązanie, które działa, ale którego tak naprawdę nie potrafię wyjaśnić.

Opierając się na tej LOCAL_LISTENERmyśli, czytałem inną odpowiedź, w której napisano:

Baza danych używa parametru LOCAL_LISTENER do identyfikacji nasłuchiwania, z którym powinien się zarejestrować. Domyślnie jest to null, co zgodnie z dokumentacją jest równoważne nazwie hosta: 1521.

Próbowałem więc pingować własną nazwę hosta i nie mogłem - wygląda to na jakiś problem z IPv6, otrzymując ogólny komunikat o błędzie.

Skorzystałem więc z tej odpowiedzi

SQL> alter system set LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope=both;
SQL> alter system register;

i teraz działa, prawdopodobnie dlatego, że może rozpoznać odwołanie do hosta lokalnego, gdzie nie udało się rozwiązać rzeczywistej nazwy hosta.

Nieskomplikowane
źródło
1
faktycznie wyjaśniłeś rozwiązanie: automatyczna rejestracja bazy danych do domyślnej LOCAL_LISTENER = „(ADRES = (PROTOCOL = TCP) (HOST = nazwa hosta) (PORT = 1521))” (gdzie nazwa hosta to nazwa sieciowa maszyny) nie działa, ponieważ istnieje problem z dostępem do urządzenia pod tą nazwą. Może jest wpis w alert.log lub w pliku sqnlnet.log (% ORACLE_HOME% / network / log /) na temat problemu z rejestracją bazy danych
miracle173 12.03.13
@Unsliced ​​Właściwie mam ten sam problem, w moim przypadku został on rozwiązany, ponieważ użyty identyfikator usługi usunął tekst postfiksu „.Domain.local”.
Drzemka
uruchomienie dwóch instrukcji alter rozwiązało dla mnie komunikat o błędzie tns listnera i udało mi się połączyć
smartexpert 25.04.16