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

oraclin25

Erfahrenes Mitglied
Hallo zusammen,

eine ganz schlichte Frage. in welchem Skript werden die Pfade zwischen SQL*PLUS und Datenbank-Dateien gespeichert, so dass SQL*PLUS direkt weiss, wo er zuzugreifen hat?
Danke.

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

SQL*Plus greift nicht auf ein Skript zu, sondern nutzt die gesetzten Umgebungsvariablen, um sich mit der entsprechenden Datenbank zu verbinden.

Zwei Beispiele:
1.
Wenn du nur eine Datenbank auf dem Datenbank-Server betreibst, so wird als Umgebungsvariable ORACLE_SID der Name der erstellten Datenbank mit angegeben:

set ORACLE_SID=testdb

2.
Sind zwei oder mehr Datenbanken auf dem Server vorhanden, so muss unter Windows jedesmal bevor SQL*Plus aufgerufen wird, die Umgebungsvariable für die jetzt "anzusprechende" Datenbank gesetzt werden:

set ORACLE_SID=testdb

Möchtest du dich hinterher mit einer anderen Datenbank verbinden, so beendest du die SQL*Plus-Sitzung und setzt die Umgebunsvariable ORACLE_SID wieder neu:

set ORACLE_SID=proddb

Bei mehreren DB auf einem Server sind ORACLE_BASE und ORACLE_HOME gleich. Um diese Variablen muss man sich nicht kümmern. Entscheidend für die Verbindung zur gewünschten Datenbank mit SQL*Plus ist die ORACLE_SID.

Anhand der ORACLE_SID wird dann systemintern beim Aufruf von SQL*Plus die passende Initialisierungsdatei (init_<SID>.ora oder spfile<SID>.ora) aufgerufen. In diesen Dateien stehen auch die Pfade zu den entsprechend passenden Datenbank-Dateien.

Ich hoffe, damit geholfen zu haben!

Gruß,
Michael
 
Hallo Michael,

vielen lieben Dank. Ich habe versucht, in SQL*PLUS eine Umgebungsvariable zu setzen:
set ORACLE_SID = XE

Leider gibt er mir einen Fehler aus:
Unbekannte option SET ab "ORACLE_SID..."

Ich bin mir sicher, dass ORACLE_SID mit dem Wert XE belegt ist. Dies steht im Registrierungseditor.

Liegt es vielleicht an der Expressedition? In einer anderen Version müsste dies funktionieren, oder?

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


Ich nehme an, es liegt an der XE-Version
 
Hallo Ratna,

hast du nun versucht die Umgebungsvariable in SQL*Plus zu setzen, oder meintest du die Eingabeaufforderung von Windows?

In SQL*Plus kann man keine Umgebungsvariable setzen...

Gruß,
Michael

PS: kannst du denn mit SQL*Plus eine Verbindung zur Datenbank herstellen?
 
Hallo Michael,

stimmt, ich habe mich vertan.. statt auf der Eingabeaufforderung, habe ich im SQL*Plus den Befehl ausgeführt.

Mich verwirrt:
1. was macht eigentlich genau "set ORACLE_SID = XE" ?
Also, das Wort "Setzen" ist waage. set = in die Umgebung wechseln? set = eine Umgebung in die Variable ORACLE_SID identifizieren?

Wenn ich auf der EINGABEAUFFORDERUNG folgendes ausführe, passiert nichts:
C:>set ORACLE_SID = XE
C:>

Soll das auch so sein?

...Sind zwei oder mehr Datenbanken auf dem Server vorhanden, so muss unter Windows jedesmal bevor SQL*Plus aufgerufen wird, die Umgebungsvariable für die jetzt "anzusprechende" Datenbank gesetzt werden:

set ORACLE_SID=testdb

D.h. erst den Befehl "set ORACLE_SID=XE" in der Eingabeaufforderung ausführen, bevor ebenfalls in der Eingabeaufforderung den Befehl "sqlplus" ausführen?

Danke



Nebenbei gemerkt, ich kann auf SQL*PLUS eine Verbindung zur Datenbank herstellen.
 
Hallo Ratna,

also mit "set ORACLE_SID=XE" setzt du eine Umgebungsvariable. Mit Hilfe von Umgebungsvariablen wie ORACLE_HOME, ORACLE_SID usw. steuerst du intern das Kommandozeilentool SQL*Plus. SQL*Plus muss ja wissen, mit welcher "Umgebung" er sich verbinden soll (bei mehr als einer DB auf dem Server).

Was du beim Setzen einer Umgebungsvariable beachten musst: es dürfen keine Leerzeichen vorhanden sein. Der Befehl "set ORACLE_SID = XE" wird zwar fehlerfrei vom Betriebssystem angenommen, aber ein "echo %ORACLE_SID% gibt nur %ORACLE_SID% als Wert aus - und das ist nicht richtig.

Es muss also heissen: set ORACLE_SID=XE

Nachdem der Befehl eingeben und mit ENTER bestätigt wurde, erscheint auch wieder nur der DOS-Prompt C:\

Mit "echo %ORACLE_SID%" wird jetzt auch der Inhalt der Umgebungsvariablen angezeigt (hier: XE).
Dann in der Eingabeaufforderung "sqlplus" oder "sqlplus / as sysdba" eingeben und du landest im SQL*Plus-Prompt.

Da du aber Oracle Express Edition installiert hast, hast du nur eine Datenbank. Dafür musst du keine ORACLE_SID setzen. Solltest du jetzt eine falsche ORACLE_SID angeben (z. B. XETEST), dann kannst du dich mit "sqlplus / as sysdba" nicht mit der Datenbank verbinden. Es kommt dann zu einem TNS Protocol adapter error. (Mit set ORACLE_SID= kannst du den Wert der Variablen wieder löschen)

Übrigens kannst du mit dem folgenden SQL-Statement prüfen, wie die Datenbank heisst (dieser Wert ist die ORACLE_SID):
SQL> select instance from v$thread;
oder
SQL> select instance_name from v$instance;

Viele Grüße,
Michael
 
Hallo Michael,

super erklärt, dabei hast Du ja eigentlich dein Oracle unter Linux laufen. vielen lieben Dank.. Wenn ich so überlege :rolleyes:, ich war eigentlich auf dem richtigen Gedankenweg, nur, ich wäre nicht draufgekommen, dass die Umgebungsvariable lediglich über Windows-Eingabeaufforderung zu setzen ist. Ich dachte nämlich, dies wäre zu erfolgen, wenn man sich bereits im SQL*PLUS-Prompt befindet. So, jetzt gehts an den Versuch, einen Client auf einem Zweitrechner zu installieren und von da aus eine Verbindung zum Server herzustellen. Drück mir die Daumen..

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

zusätzlich zu der umfangreichen Erklärung von Michael Melchers wollte ich nur noch erwähnen, dass man sich über:
Code:
sqlplus "connectstring"

Z.Bsp:
Code:
REM mit User "username" und Passwort "password" zur lokalen Instanz "InstanceName" verbinden (bzw. der Instanz die mit "InstanceName" in der tnsnames.ora beschrieben ist)
sqlplus username/password@InstanceName
...auch explizit mit einer lokalen oder auch remote Instanz verbinden kann.
Siehe auch:
http://mattejones.wordpress.com/2011/06/22/sqlplus-connection-string-options/
http://penguinman-techtalk.blogspot.de/2009/02/sqlplus-connection-to-remote-oracle.html

Gruß Tom
 
Hallo Tom,

mhh.. Du meinst, es reicht, auf dem Zweitrechner, "lediglich" SQL*PLUS zu installieren? Mhh.. aber wie würde dann die Verbindungskonfiguration aussehen? Informationen bzgl. Hostnamen, Server-Port, Instanzname?

Danke..

Schöne Grüße aus Rheinland,

Eure Ratna
 
Hallo,

mhh.. Du meinst, es reicht, auf dem Zweitrechner, "lediglich" SQL*PLUS zu installieren?
Nicht ganz... du brauchst zumindest eine Oracle Client Installation (eine Installations Variante im Installer), In der Oracle Client Installation dort ist dann u.a. auch SQL Plus enthalten.

Mhh.. aber wie würde dann die Verbindungskonfiguration aussehen? Informationen bzgl. Hostnamen, Server-Port, Instanzname?

Du kannst dich dann, wie in den obigen Links angegeben, per SQL Plus auch mit einer entfernten Datenbank-Instanz verbinden.

Gruß Tom
 
Zurück