ocilogon(): _oci_open_server: [Oracle + PHP + Linux]
Florian Müller
- php
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
hallo,
so wie sich das anhört, hat dein dein wwwrun keine rechte die beschreibung zu fehlermeldung aus den dateien zu lesen.
gruss
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
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
un das hier: http://www.dclp-faq.de/q/q-oracle-fehler.html
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
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
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
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
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
Bin gerade dabei einen neuen bzw. aelteren Apache zu ziehen.
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
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
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
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
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