Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
27
ZUGRIFFE
4747
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    oraclin25 ist offline Mitglied Brokat
    Registriert seit
    Apr 2012
    Beiträge
    308
    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
     

  2. #2
    Michael Melchers ist offline Mitglied
    Registriert seit
    Feb 2012
    Ort
    Harsefeld
    Beiträge
    17
    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
    Thomas Darimont und oraclin25 bedanken sich. 

  3. #3
    oraclin25 ist offline Mitglied Brokat
    Registriert seit
    Apr 2012
    Beiträge
    308
    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
     

  4. #4
    Michael Melchers ist offline Mitglied
    Registriert seit
    Feb 2012
    Ort
    Harsefeld
    Beiträge
    17
    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?
    Thomas Darimont bedankt sich. 

  5. #5
    oraclin25 ist offline Mitglied Brokat
    Registriert seit
    Apr 2012
    Beiträge
    308
    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.
    Thomas Darimont bedankt sich. 

  6. #6
    Michael Melchers ist offline Mitglied
    Registriert seit
    Feb 2012
    Ort
    Harsefeld
    Beiträge
    17
    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
    Thomas Darimont bedankt sich. 

  7. #7
    oraclin25 ist offline Mitglied Brokat
    Registriert seit
    Apr 2012
    Beiträge
    308
    Hallo Michael,

    super erklärt, dabei hast Du ja eigentlich dein Oracle unter Linux laufen. vielen lieben Dank.. Wenn ich so überlege , 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
     

  8. #8
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    10.222
    Hallo,

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

    Z.Bsp:
    [code]
    Code :
    1
    2
    
    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...tring-options/
    http://penguinman-techtalk.blogspot....te-oracle.html

    Gruß Tom
    Michael Melchers bedankt sich. 
    Du kommst aus dem Saarland oder Umgebung? Du hast Interesse an Java-Technologie Themen? Then let's Meetup!

    Java rocks! http://www.jugsaar.de

    Does IT in Java and .Net
    Xing
    Twitter

  9. #9
    oraclin25 ist offline Mitglied Brokat
    Registriert seit
    Apr 2012
    Beiträge
    308
    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
     

  10. #10
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    10.222
    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
    Michael Melchers und oraclin25 bedanken sich. 
    Du kommst aus dem Saarland oder Umgebung? Du hast Interesse an Java-Technologie Themen? Then let's Meetup!

    Java rocks! http://www.jugsaar.de

    Does IT in Java and .Net
    Xing
    Twitter

  11. #11
    oraclin25 ist offline Mitglied Brokat
    Registriert seit
    Apr 2012
    Beiträge
    308
    Hallo Tom,

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

    $ sqlplus dbUser/dbPassword@'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=remoteServer)(PORT=1521)))(CONNE CT_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?
    Danke

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

  12. #12
    oraclin25 ist offline Mitglied Brokat
    Registriert seit
    Apr 2012
    Beiträge
    308
    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
     

  13. #13
    Michael Melchers ist offline Mitglied
    Registriert seit
    Feb 2012
    Ort
    Harsefeld
    Beiträge
    17
    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
     

  14. #14
    oraclin25 ist offline Mitglied Brokat
    Registriert seit
    Apr 2012
    Beiträge
    308
    Hallo Michael,

    danke..

    $ sqlplus dbUser/dbPassword@'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=remoteServer)(PORT=1521)))(CONNE CT_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?

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

  15. #15
    Michael Melchers ist offline Mitglied
    Registriert seit
    Feb 2012
    Ort
    Harsefeld
    Beiträge
    17
    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
     

Thema nicht erledigt
Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Anzeigen wo im DOM man sich befindet
    Von Kai-Behncke im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 18.08.09, 14:29
  2. Anmeldevorgang befindet sich in einer Schleife
    Von brainsucker im Forum Microsoft Windows
    Antworten: 1
    Letzter Beitrag: 05.06.09, 09:40
  3. Antworten: 0
    Letzter Beitrag: 07.05.08, 16:32
  4. aktuelle zeile auf der sich die suche befindet ausgeben ?
    Von Soapp im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 20.12.05, 20:26
  5. Antworten: 18
    Letzter Beitrag: 07.11.04, 22:35