Połączenie z Oracle na lokalnej maszynie

0

Hej
Tworzyłem sobie dla nauki apkę webową w Django, która korzystała z bazy danych Oracle Express zainstalowanej na moim komputerze.
Utworzyłem sobie nową pluggable database, użytkownika user123 i dałem mu uprawnienia.

Wszystko działało dobrze, dopóki byłem w domu połączony przez kabel Ethernet do sieci.

Teraz jestem w innym mieście i do sieci łączę się przez WiFi - nie działa mi teraz w ogóle ta baza danych, nie mogę się połączyć ani do tej pluggable db, ani do tego CDB przez konto SYSTEM. Ciąglę dostaję błąd:

An error was encountered performing the requested operation:
Listener refused the connection with the following error:
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

<próba połączenia przez SQL Developer, wcześniej działało>

Moje pliki listener.ora i tnsnames.ora

listener.ora

# listener.ora Network Configuration File: C:\app\Mariusz\product\21c\homes\OraDB21Home1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.

DEFAULT_SERVICE_LISTENER = XE

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\app\Mariusz\product\21c\dbhomeXE)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\Mariusz\product\21c\dbhomeXE\bin\oraclr.dll")
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = MOJE_IP)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

tnsnames.ora

# tnsnames.ora Network Configuration File: C:\app\Mariusz\product\21c\homes\OraDB21Home1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = MOJE_IP)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

LISTENER_XE =
  (ADDRESS = (PROTOCOL = TCP)(HOST = MOJE_IP)(PORT = 1521))


ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )


Próbowałem zamienić też adres IP na localhost, potem wywołać:
lsnrctl start
lsnrctl status

ale nic nie dało (dalej ten sam błąd).

W SQL Developer łączę się tak:

blad.png
Próbowałem też zmienić Service name na XE, ale to samo, z resztą wcześniej działało

0

Masz wystawiony komputer na świat? Albo masz VPNa? Bo jak nie to jaki podajesz adres bazy?

1

Sprawa podstawowa - a uruchamiasz te serwisy w Usługach Windows? Nie używaj IP zewnętrznego w konfiguracji usług, wpisz w plikach localhost i tak samo wpisz w Hostname przy połączeniu.

Z tego co widzę, masz tu dynamiczną konfigurację bazy bo listener nie ma jej wpisanej na stałe w pliku. Zatem baza powinna się zarejestrować w listenerze, a do tego musi wiedzieć gdzie on jest.

listener.ora

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\app\Mariusz\product\21c\dbhomeXE)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\Mariusz\product\21c\dbhomeXE\bin\oraclr.dll")
    )
    (SID_DESC =
      (GLOBAL_DBNAME = XE)
      (ORACLE_HOME = C:\app\Mariusz\product\21c\dbhomeXE)
      (SID_NAME = XE)
    )    
  )

tnsnames.ora

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

Potem przy Connection type wybierz: TNS
albo Basic z parametrami: localhost, 1521, service name: XE

Zamknij oba serwisy, potem uruchom Listener, w cmd sprawdź listener status - serwis XE powinien być niedostępny.
a potem uruchom serwis od bazy, znów sprawdź listener status
a na koniec sprawdź połączenie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1