[Oracle] Woher weiss SQL*PLUS wo die Datenbank sich befindet?

Hallo Tom,

ach so, danke.. Mhh.. eine Frage zwischendurch:

$ sqlplus dbUser/dbPassword@'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=remoteServer)(PORT=1521)))(CONNECT_DATA=(SID=dbSid)))'

Das wäre ein Beispiel, wie man eine remote-Verbindung zur Datenbank herstellt. Ich frage mich:
Angenommen, ich habe auf Rechner_1 eine Datenbank mit dem Namen "finance". Weiterhin auf Rechner_1 existieren 2 Instanzen, die "finance" bedienen, sagen wir mal Ins_1 und Ins_2.

Anhand obigen Beispiels der string-Verbindung würde es ja heißen, dass der CLIENT auf Rechner_2 die Möglichkeit hat, zu wählen, mit welcher Instanz der CLIENT sich mit "finance" verbinden möchte. Also:
HOST=finance
...
SID=Ins_1
...

Ist das richtig so?:rolleyes:
Danke

Schöne Grüße aus Rheinland,
Eure Ratna:p
 
Mhh.. ich bin mal ein bisschen kleinig:
set ORACLE_SID=Ins_1

ist das eigentlich eine Aktion zum Setzen der Umgebungsvariable oder eher eine Aktion, mit welcher Instanz man mit der Datenbank arbeiten möchte?

Ich habe ja lediglich eine Datenbank und eine Instanz. Damit kann ich mich direkt anmelden ohne erstmal set ORACLE_SID=XE ausführen zu müssen. Als wäre die "Umgebung" bereits "gesetzt". Ich glaube, dass der Ausdruck "Umgebungsvariable setzen" nicht richitg ist. Danke

Schöne Grüße aus Rheinland,
Eure Ratna
 
Hallo Ratna,

primär ist "set ORACLE_SID=Ins_1" eine Aktion, um eine Umgebungsvariable zu setzen. Wenn diese aber auch gesetzt wurde, dann verbindest du dich mit dieser Datenbank, wenn du SQL*Plus startest. Allerdings kannst du die ORACLE_SID "umgehen", wenn du den von Tom erwähnten Connectstring verwendest (konfigurierte listener.ora-Datei vorausgesetzt).

Eine Oracle-DB-Installation unter Linux liefert ein kleines Shell-Script mit, mit dem man bequem die ORACLE_SID festlegen bzw. zwischen mehreren wechseln kann (Scriptname: oraenv). Unter Windows fehlt dieses Script aber. Da bleibt halt nur die oben beschriebene Variante.

Bei der Installation von Oracle Express Edition wird die ORACLE_SID in die Registry geschrieben (unter: HKEY_LOCAL_MACHINE\Software\Oracle\KEY_XE\). Somit ist "die Umgebung bereits gesetzt".

Du kannst testweise den Wert der SID in der Registry mal ändern und versuchen, dich mittels "sqlplus / as sysdba" zu verbinden - es kommt zu einer Fehlermeldung.

Setzt du dann manuell in der Eingabeaufforderung die ORACLE_SID=XE, dann ist eine Verbindung wieder möglich oder du gibst den Connectstring mit an.

Gruß,
Michael
 
Hallo Michael,

danke..;)

$ sqlplus dbUser/dbPassword@'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=remoteServer)(PORT=1521)))(CONNECT_DATA=(SID=dbSid)))'

aus dem String ziehe ich unter anderem folgende Verbindungsinformationen raus:
1. den Hostnamen vom Datenbank-Server
2. die Portnummer des Listeners
3. die Instanz(ORACLE_SID)

Was ist eigentlich mit den anderen Informationen wie z.B. ORACLE_BASE oder ORACLE_HOME von dem Server? Sie braucht der Client oder? Sind sie irgendwo intern im System von dem Client installiert? Kann nicht sein oder?:rolleyes:

Schöne Grüße aus Rheinland,
Eure Ratna:p
 
Hallo Ratna,

die Informationen, die du aus dem Connection-String erhälst, sind korrekt.

Die Infos wie ORACLE_BASE und ORACLE_HOME auf dem Server werden von den Clients nicht benötigt. Das sind Informationen der Oracle-Installation des Servers.

Der Client benötigt für eine SQL*Plus-Session den Connectionstring oder den Service-Name (z. B. XE). Denk dran, dass du auf dem Client die Datei tnsnames.ora mit dem Eintrag aus der tnsnames.ora des Servers (auf dem die XE läuft) versiehst. Und auf dem Server muss der Listener gestartet sein. Kann getestet werden mit: lsnrctl status XE in der Eingabeaufforderung.

Du kommst jetzt in den Bereich der SQLnet-Konfiguration von Oracle. Kann manchmal etwas "tricky" sein...

Viele Grüße,
Michael
 
Hallo Michael,

danke danke... mhh.. eine Frage: Service-Name und ORACLE_SID sind das Gleiche?

Schöne Grüße,
Eure Ratna
 
Hallo Ratna,

sie können zwar den gleichen Namen haben, sind aber dennoch unterschiedlich zu verstehen.

Die SID ist ein eindeutiger Bezeichner/Name für eine Oracle Instanz. Der Service-Name ist einfach ausgedrückt der Alias in der tnsnames.ora, der für Remote-Verbindungen vergeben wird.

In deiner tnsnames.ora könnte folgendes drinstehen:

XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = <SERVERNAME oder IP>)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)

Viele Grüße,
Michael
 
Hallo Michael,

danke..

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

Hier fällt mir etwas auf. Als HOST ist hier "Heim" eingetragen. Was ist der Unterschied zwischen "Heim" und "localhost"? Weisst Du das vielleicht?

Schöne Grüße aus Rheinland,
Eure Ratna
 
ich kann mir nicht vorstellen, dass bei "HOST" ich "Heim" einzugeben habe. Eher meine IP-Adresse oder?
 
Hallo Ratna,

ich tippe mal drauf, dass in der Hosts-Datei als Alias für die IP 127.0.0.1 "Heim" drin steht. Sicher bin ich mir da aber nicht...

Viele Grüße,
Michael
 
Zurück