Jak używać narzędzia sqlplus do łączenia się z bazą danych Oracle znajdującą się na innym hoście bez modyfikowania własnego tnsnames.ora

80

Chcę połączyć się z bazą danych Oracle na innym hoście za pomocą narzędzia sqlplus. Ta strona sugerowała dodanie elementu do moich nazw tnsn, aby połączyć się z tą bazą danych

local_SID =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL= TCP)(Host= hostname.network)(Port= 1521))
    (CONNECT_DATA = (SID = remote_SID))
  )

a następnie użyj tego w sqlplus

sqlplus user/pass@local_SID

Jednak w moich okolicznościach modyfikacja lokalnych nazw tns nie jest możliwa. Czy można połączyć się ze zdalną bazą danych za pomocą argumentu sqlplus bez konieczności zmiany nazw tnsn? Coś jak

sqlplus user/pass@remote_SID@hostname.network ;( I know, this one is not valid)
Louis Rhys
źródło
1
jeszcze krótszy - sqlplus userid / password @ database
@GlennLong - ale w twojej wersji databasewciąż istnieje alias TNS, który musi istnieć w tnsnames.ora, więc jest taki sam, jak Louis próbował tego uniknąć?
Alex Poole,

Odpowiedzi:

85
 sqlplus user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))

Może i może to zależeć od używanego środowiska wiersza poleceń, musisz zacytować ciąg, coś w rodzaju

 sqlplus "user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))"

lub

 sqlplus 'user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))'
René Nyffenegger
źródło
35

Możesz użyć do tego łatwego połączenia :

sqlplus usr/pass@hostname.network/remote_service_name

Aby umożliwić łatwe połączenie na komputerze, musisz dodać go do NAMES.DIRECTORY_PATH pliku sqlnet.ora, np .:

NAMES.DIRECTORY_PATH=(EZCONNECT)

Jeśli Twój odbiornik korzysta z portu innego niż domyślny, użyj portu [email protected]:port/....

W rzeczywistości wydaje się, że musisz podać nazwę usługi, a nie SID; mogą być takie same, ale jeśli nie, musisz je uzyskać z serwera.

Alex Poole
źródło
1
Jeśli nazwa usługi jest taka sama jak nazwa hosta, nie musisz nawet określać nazwy usługi podczas łączenia. (Praktycznie nikt tego nie robi, ale dobrze wiedzieć.)
durette
Martwy link .......
Harvey
1
@Harvey - zaktualizowano, dziękuję.
Alex Poole
17

Utwórz kopię pliku tnsnames.ora w katalogu, w którym możesz pisać, odpowiednio zmodyfikuj plik, a następnie ustaw zmienną środowiskową TNS_ADMIN na lokalizację tego katalogu.

na przykład:

cp $ORACLE_HOME/network/admin/tnsnames.ora /tmp/tnsnames.ora
# edit the /tmp/tnsnames.ora file to add your entries

# Set the $TNS_ADMIN environment variable so that sqlplus knows where to look 
export TNS_ADMIN=/tmp
Philᵀᴹ
źródło
2
To znacznie lepsza odpowiedź
Andrew Sledge
To podejście działa w systemie, w którym nie ma zainstalowanej infrastruktury Oracle, oprócz klienta sqlplus. Po prostu skopiuj plik tnsnames.ora z serwera db i postępuj zgodnie z procesem Phila.
theRiley
3

W systemie Unix / Linux możesz użyć plików konfiguracyjnych na poziomie użytkownika, aby zastąpić wpisy na poziomie systemu.

Poziom systemu Poziom użytkownika 
Plik konfiguracyjny Plik konfiguracyjny
------------------ -------------------
sqlnet.ora $ HOME / .sqlnet.ora
tnsnames.ora $ HOME / .tnsnames.ora

Pliki konfiguracji na poziomie systemu można znaleźć w katalogu $TNS_ADMIN. Jeśli zmienna TNS_ADMINnie jest ustawiona, są one wyszukiwane w katalogu $ORACLE_HOME/network/admin.

Pliki konfiguracyjne na poziomie użytkownika nie zastępują plików konfiguracyjnych na poziomie systemu jako całości (ponieważ TNS_ADMINkatalog zastępuje cały $ORACLE_HOME/network/adminkatalog), ale dodają lub zmieniają wpisy plików konfiguracyjnych na poziomie systemu. Jeśli pozycja znajduje się w pliku konfiguracyjnym na poziomie użytkownika, wówczas jest ona używana, jeśli nie istnieje w pliku konfiguracyjnym na poziomie użytkownika, wówczas używana jest pozycja pliku konfiguracyjnego na poziomie systemu.

cud173
źródło