So stellen Sie mit sqlplus eine Verbindung zu einer Oracle-Datenbank her, die sich auf einem anderen Host befindet, ohne meine eigenen tnsnames.ora zu ändern

80

Ich möchte mit sqlplus eine Verbindung zu einer Oracle-Datenbank auf einem anderen Host herstellen. Auf dieser Seite wurde vorgeschlagen, ein Element in meine tnsnames aufzunehmen, um eine Verbindung zu dieser Datenbank herzustellen

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

und benutze das dann in sqlplus

sqlplus user/pass@local_SID

Unter meinen Umständen ist es jedoch nicht möglich, die lokalen tnsnames zu ändern. Ist es möglich, mit sqlplus eine Verbindung zu einer entfernten Datenbank herzustellen, ohne tnsnames ändern zu müssen? So etwas wie

sqlplus user/pass@remote_SID@hostname.network ;( I know, this one is not valid)
Louis Rhys
quelle
1
noch kürzer - sqlplus userid / password @ database
@GlennLong - aber in deiner Version gibt databasees immer noch einen TNS-Alias, der in der existieren muss tnsnames.ora, also ist es das gleiche, was Louis zu vermeiden versucht hat?
Alex Poole

Antworten:

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

Möglicherweise, und dies hängt möglicherweise von der Befehlszeilenumgebung ab, die Sie verwenden, müssen Sie die Zeichenfolge in Anführungszeichen setzen

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

oder

 sqlplus 'user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))'
René Nyffenegger
quelle
35

Sie können hierfür easy connect verwenden :

sqlplus usr/pass@hostname.network/remote_service_name

Um eine einfache Verbindung auf Ihrem Computer zu ermöglichen, müssen Sie diese NAMES.DIRECTORY_PATH in sqlnet.ora hinzufügen, z.

NAMES.DIRECTORY_PATH=(EZCONNECT)

Wenn sich Ihr Listener auf einem nicht standardmäßigen Port befindet, verwenden Sie [email protected]:port/....

Eigentlich müssen Sie einen Dienstnamen angeben, keine SID. Sie können gleich sein, aber wenn nicht, müssen Sie dies vom Server anfordern.

Alex Poole
quelle
1
Wenn der Dienstname mit dem Hostnamen identisch ist, müssen Sie beim Herstellen der Verbindung nicht einmal den Dienstnamen angeben. (Praktisch niemand tut dies, aber es ist schön zu wissen.)
Durette
Dead link .......
Harvey
1
@ Harvey - aktualisiert, danke.
Alex Poole
17

Erstellen Sie eine Kopie der Datei tnsnames.ora in einem Verzeichnis, in das Sie schreiben können, ändern Sie die Datei entsprechend und setzen Sie die Umgebungsvariable TNS_ADMIN auf den Speicherort dieses Verzeichnisses.

z.B:

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ᵀᴹ
quelle
2
Dies ist eine viel, viel bessere Antwort
Andrew Sledge
Dieser Ansatz funktioniert mit einem System, auf dem keine andere Oracle-Infrastruktur als ein sqlplus-Client installiert ist. Kopieren Sie einfach die Datei tnsnames.ora vom Datenbankserver und folgen Sie Phils Prozess.
TheRiley
3

Unter Unix / Linux können Sie die Konfigurationsdateien auf Benutzerebene verwenden , um Einträge auf Systemebene zu überschreiben.

Benutzerebene auf Systemebene 
Konfigurationsdatei Konfigurationsdatei
------------------ -------------------
sqlnet.ora $ HOME / .sqlnet.ora
tnsnames.ora $ HOME / .tnsnames.ora

Die Konfigurationsdateien auf Systemebene befinden sich im Verzeichnis $TNS_ADMIN. Wenn die Variable TNS_ADMINnicht gesetzt ist, werden sie im Verzeichnis gesucht $ORACLE_HOME/network/admin.

Die Konfigurationsdateien auf Benutzerebene TNS_ADMINersetzen nicht die gesamten Konfigurationsdateien auf Systemebene (da das Verzeichnis das gesamte $ORACLE_HOME/network/adminVerzeichnis ersetzt), sondern ergänzen oder ändern Einträge der Konfigurationsdateien auf Systemebene. Wenn ein Eintrag in einer Konfigurationsdatei auf Benutzerebene vorhanden ist, wird dieser verwendet. Wenn er in der Konfigurationsdatei auf Benutzerebene nicht vorhanden ist, wird der Eintrag der Konfigurationsdatei auf Systemebene verwendet.

miracle173
quelle