Florian Müller: ocilogon(): _oci_open_server: [Oracle + PHP + Linux]

Hallo,

vorab mein System:
------------------------
BS: Gentoo Linux
DB: Oracle 9.2.0 + PatchSet 4
PHP: PHP 4.3.4 R4
Apache: 2.0.49

Wenn ich folgendes Script (test.php) ausführe:
------------------------------------------
(zum Test ob die Umgebungsvariablen gesetzt sind lasse ich sie ausgeben)
echo getenv("ORACLE_SID") . "<br>";
echo getenv("ORACLE_BASE") . "<br>";
echo getenv("ORACLE_HOME") . "<br>";
echo getenv("ORA_NLS33") . "<br>";
echo getenv("TNS_ADMIN") . "<br>";

$user = "test";
$pass = "geheim";
$db = "ORCL";

$con = OCILogon($user,$pass,$db) or die ("Keine Verbindung");
$sql = "Select * From BEARBEITER";
$result = OCIParse($con,$sql) or die ("No parsing");
OCIExecute($result) or die ("No execution");

while (OCIFetch($result)) {
$bearbeiter = OCIResult($result,"BEARBEITER");
echo $bearbeiter . "<br>";
}
OCIFreeStatement($result);
OCILogoff($con);

erscheint folgende Fehlermeldung:
---------------------------------------
ORCL
/oracle/ora
/oracle/ora/9.2.0
/oracle/ora/9.2.0/ocommon/nls/admin/data
/oracle/ora/9.2.0/network/admin/tnsnames.ora

Warning: ocilogon(): _oci_open_server: Error while trying to retrieve text for error ORA-12154 in /www/test.php on line 36
Keine Verbindung

Zeile 36 ist =>
$con = OCILogon($user,$pass,$db) or die ("Keine Verbindung");

Wenn ich das selbe Script auf der Konsole ausführe:
php test.php
kommt die gewünschte Ausgabe korrekt bzw. werden alle Bearbeiter aufgeführt.

Bin etwas ratlos .... kann mir jemand einen Tipp geben.

Danke schoneinmal im Voraus.

Gruss
Florian

  1. hallo,

    so wie sich das anhört, hat dein dein wwwrun keine rechte die beschreibung zu fehlermeldung aus den dateien zu lesen.

    gruss

    --
    no strict; no warnings;
    1. Hallo,

      so wie sich das anhört, hat dein dein wwwrun keine rechte die beschreibung zu fehlermeldung aus den dateien zu lesen.

      kann leider nicht sein, da wir es als Benutzer Apache ebenfalls getestet haben.

      Gruss
      Florian

      1. hmm ok

        (ich persönlich verabscheue oracle, aber naja ;-) also vielleicht hilft dir das ja weiter: http://www.dclp-faq.de/q/q-oracle-tns-name.html

        weil google spuckt nicht wirklich viel aus

        gruss

        --
        no strict; no warnings;
        1. un das hier: http://www.dclp-faq.de/q/q-oracle-fehler.html

          --
          no strict; no warnings;
          1. un das hier:
            http://www.dclp-faq.de/q/q-oracle-fehler.html

            Hallo,

            danke für Deine Hilfe, leider habe ich Deine Links bereits vorher
            schon entdeckt und konnten mir leider nicht weiterhelfen.

            Gruss
            Florian

            1. sorry, tut mir leid, hast du auch das gelesen mit den unterschiedlichen dateinamen für deutsche und englishe version?

              denke das hast du. viel glück

              wenn dus raus hast, lass es mich bitte mal wissen. danke

              gruss

              --
              no strict; no warnings;
              1. sorry, tut mir leid, hast du auch das gelesen mit den unterschiedlichen dateinamen für deutsche und englishe version?

                Wie meinst Du das?

                Wir sind gerade zu dritt am Problem dran.

                Gruss
                Florian

                1. also ;-) http://www.dclp-faq.de/q/q-oracle-fehler.html

                  du kannst versuchen die fehlernummer mal manuell rauszukriegen linux:# / oerr ora <nummer>

                  wenn du dann folgenden fehler kriegst: Cannot find /u01/8.1.6/rdbms/mesg/orad.msg file.

                  dann: [quote] st die Oracle Installation eine teilweise ans deutsche angepasste Version. (oraus.msg ist die original Datei und orad.msg ist eine deutsche Version) Da die orad.msg nciht in allen Fällen vorhanden ist, empfiehlt es sich einen symbolischen Link zu setzen. [/quote]

                  hoffe ich führe dich nicht in die falsche richtung, ich kann aber auch nur raten.

                  ps: dann hast du erstmal die fehler beschreibung, aber das wird wahrscheinlich den eigentlichen fehler noch nicht beseitigt haben, der ja anscheinend irgendwie mit der connection zusammenhängt

                  --
                  no strict; no warnings;
                  1. Hallo,

                    also an der Sprache kann es nicht liegen, kann mir die ORA Fehlermeldungen ueber die
                    Konsole anzeigen lassen.(die mir im Grunde nichts anderes sagen als mein Browser)

                    Gruss
                    Florian

                    1. gut, dann halt dich mal an christian

                      gruss ;-)

                      --
                      no strict; no warnings;
          2. Bin gerade dabei einen neuen bzw. aelteren Apache zu ziehen.

  2. Hallo Florian,

    (zum Test ob die Umgebungsvariablen gesetzt sind lasse ich sie ausgeben)
    echo getenv("ORACLE_SID") . "<br>";

    Sind diese bereits *vor* dem Apache-Start gesetzt? Genau danach sieht's nämlich aus, dass dem nicht so ist.

    Viele Grüße,
    Christian

    1. Hallo,

      (zum Test ob die Umgebungsvariablen gesetzt sind lasse ich sie ausgeben)
      echo getenv("ORACLE_SID") . "<br>";

      Sind diese bereits *vor* dem Apache-Start gesetzt? Genau danach sieht's nämlich aus, dass dem nicht so ist

      nur zur Sicherheit: Wo werden die Umgebungsvariablen Deiner Meinung nach gesetzt?

      GRuss
      Florian

      1. Hallo Florian,

        nur zur Sicherheit: Wo werden die Umgebungsvariablen Deiner Meinung nach gesetzt?

        Dort, wo der Apache beim Start aufgerufen wird. Wenn es ein Startscript ist, dann dort, wenn Du ihn über apachectl start aufrufst, dann in der Shell, in der Du apachectl aufrufst. Was jedenfalls *nicht* geht, ist die Variablen erst innerhalb der Apache-Config (SetEnv oder so) bzw. innerhalb von PHP (putenv) zu setzen.

        Viele Grüße,
        Christian

        1. Hallo,

          Dort, wo der Apache beim Start aufgerufen wird. Wenn es ein Startscript ist, dann dort, wenn Du ihn über apachectl start aufrufst, dann in der Shell, in der Du apachectl aufrufst. Was jedenfalls *nicht* geht, ist die Variablen erst innerhalb der Apache-Config (SetEnv oder so) bzw. innerhalb von PHP (putenv) zu setzen.

          Also nochmal eine kurze Zusammenfassung:
          ----------------------------------------
          OHNE APACHE (ueber Konsole als Apache User)
          02-APR-2004 15:48:41 *
          (CONNECT_DATA=(SERVICE_NAME=ORCL)(CID=(PROGRAM=)(HOST=hostname)(USER=apache))) *
          (ADDRESS=(PROTOCOL=tcp)(HOST=ipadresse)(PORT=32907)) * establish * ORCL * 0

          MIT APACHE
          02-APR-2004 15:54:01 * 12502
          TNS-12502: TNS:listener received no CONNECT_DATA from client

          Diese Informationen bekomme ich aus:
          Logfile
          /oracle/ora/9.2.0/network/log/lsnr_orcl.log

          Allgemeine Umgebungsvariablen (auch für User apache)

          ORACLE_SID=ORCL
          ORACLE_BASE=/oracle/ora
          ORACLE_HOME=/oracle/ora/9.2.0
          LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${ORACLE_HOME}/lib
          NLS_LANG=AMERICAN_AMERICA.WE8DEC
          ORA_NLS33=${ORACLE_HOME}/ocommon/nls/admin/data
          TNS_ADMIN=${ORACLE_HOME}/network/admin

          Zusätzlich in /etc/apache/conf/apache.conf

          SetEnv ORACLE_SID ORCL
          SetEnv ORACLE_BASE /oracle/ora
          SetEnv ORACLE_HOME /oracle/ora/9.2.0
          SetEnv NLS_LANG AMERICAN_AMERICA.WE8DEC
          SetEnv ORA_NLS33 /oracle/ora/9.2.0/ocommon/nls/admin/data
          SetEnv TNS_ADMIN /oracle/ora/9.2.0/network/admin
          SetEnv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${ORACLE_HOME}/lib

          Fehler apache error_log

          [Fri Apr  2 15:54:04 2004] [notice] child pid 5179 exit signal Segmentation
          fault (11)
          [Fri Apr  2 15:54:04 2004] [notice] child pid 5180 exit signal Segmentation
          fault (11)
          [Fri Apr  2 15:54:05 2004] [notice] child pid 5181 exit signal Segmentation
          fault (11)
          [Fri Apr  2 15:54:05 2004] [notice] child pid 5182 exit signal Segmentation
          fault (11)
          [Fri Apr  2 15:54:05 2004] [notice] child pid 5183 exit signal Segmentation
          fault (11)
          [Fri Apr  2 15:54:05 2004] [notice] child pid 5184 exit signal Segmentation
          fault (11)

          So langsam würde ich mich über eine positive Meldung meines Apaches
          freuen.

          Gruss
          Florian

          1. Hallo Florian,

            Allgemeine Umgebungsvariablen (auch für User apache)

            ORACLE_SID=ORCL
            ORACLE_BASE=/oracle/ora
            ORACLE_HOME=/oracle/ora/9.2.0
            LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${ORACLE_HOME}/lib
            NLS_LANG=AMERICAN_AMERICA.WE8DEC
            ORA_NLS33=${ORACLE_HOME}/ocommon/nls/admin/data
            TNS_ADMIN=${ORACLE_HOME}/network/admin

            Wie sieht Dein Apache-Startscript aus? (wenn diese Umgebungsvariablen in /etc/profile stehen, nützten sie Dir *nichts*)

            Zusätzlich in /etc/apache/conf/apache.conf

            SetEnv ORACLE_SID ORCL
            SetEnv ORACLE_BASE /oracle/ora
            SetEnv ORACLE_HOME /oracle/ora/9.2.0
            SetEnv NLS_LANG AMERICAN_AMERICA.WE8DEC
            SetEnv ORA_NLS33 /oracle/ora/9.2.0/ocommon/nls/admin/data
            SetEnv TNS_ADMIN /oracle/ora/9.2.0/network/admin
            SetEnv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${ORACLE_HOME}/lib

            Das bringt nichts, das kannst du gleich vergessen. Hab ich Dir doch gesagt.

            Viele Grüße,
            Christian