ipu Geschrieben 2. Juli 2007 Geschrieben 2. Juli 2007 Hi zusammen, habe auf einem Windows-Server Oracle10g installiert mit einer Instanz und 2 Datenbanken. Auf einem anderen Laufwerk ist die WEB-DB inkl. Apache von Oracle installiert. Mit php will ich auf die Daten zugreifen, um diese im Browser anzuzeigen. Es scheitert schon an der Verbindung zur DB. So sieht der Connection-String aus: $conn = OCILogon("$dbuser","$dbpass",$db); Und so die Fehlermeldung: ORA-12154. Die Fehlermeldung besagt, daß der angegebene Connect-Bezeichner nicht aufgelöst werden konnte. Ich habe mir tnsnames.ora angeschaut, da ist m. E. alles ok. Eine Anmeldung mit SQL*Plus funktioniert einwandfrei. Hab ich vielleicht bei der Installation auf 2 Laufwerke einen Fehler gemacht? Oder muß ich bei der Web-DB noch irgendwo einen Eintrag machen, damit die DB gefunden wird? Mit dem NetManager von Oracle habe ich die Verbindung getestet, das funktioniert. Hat jemand eine Idee? Danke sehr im Voraus! Grüße von ipu Zitieren
carstenj Geschrieben 2. Juli 2007 Geschrieben 2. Juli 2007 Hi, das liegt vermutlich daran, dass in der Umgebung deines Webservers die Oracle Variablen gar nicht oder nicht richtig gesetzt sind. EDIT: Sehe gerade, dass es um Windows geht. Zitieren
ipu Geschrieben 2. Juli 2007 Autor Geschrieben 2. Juli 2007 hhmmm. als Umgebungsvariable habe ich das oracle-home verzeichnis wie folgt angegeben: [Laufwerksbuchstabe]:\oracle\rpoduct\10.2.0\[Name Instanz] Das ist doch soweit korrekt, oder? In Foren habe ich gelesen, daß der Connect-String nicht zwingend den Namen der DB enthalten muß und falls der fehlt, dann die Umgebungsvariable für oracle-home ausgelesen wird. Was mir gerade noch eingefallen ist: ich habe als port beim listener 1523 statt den standardport 1521 verwendet. kann es evtl. auch daran liegen? grüße von ipu Zitieren
carstenj Geschrieben 2. Juli 2007 Geschrieben 2. Juli 2007 Hi, jau, kann natürlich auch sein. Warum hast du das denn gemacht? Zitieren
ipu Geschrieben 2. Juli 2007 Autor Geschrieben 2. Juli 2007 testzwecke. hatte mal irgendwie 2 listener laufen, einen dann halt mit dem port 1523. - bin gerade dabei, alles neu zu installieren (zum x-ten mal). dann werde ich den port 1521 verwenden und nix ändern. alles neu weil html-db bei der neuinstallation meint, der tablespace sysaux darf gar nicht existieren und ich den als sys nicht löschen kann. hast du da ne ahnung, wie ich das anders lösen kann? grüße von ipu Zitieren
Amstelchen Geschrieben 2. Juli 2007 Geschrieben 2. Juli 2007 teste systematisch schichtweise von UNTEN nach OBEN vor und teste, ob der dienst/TNSname erreichbar ist - zuerst ping, dann telnet 1521, dann tnsping, dann sqlplus, dann PHP - das alles am webserver. bevor die instanz(en) nicht korrekt laufen, würde ich PHP garnicht anfassen. s'Amstel Zitieren
ipu Geschrieben 2. Juli 2007 Autor Geschrieben 2. Juli 2007 die instanz (eine) läuft m. e. korrekt. mit tnsping habe ich erfolgreich getestet, mit sql*plus kann ich auf die db zugreifen, über die odbc-schnittstelle kann ich mit einem access-frontend auf die db zugreifen, im net-manager funktioniert die connection. wenn der connect-string in php soweit richtig ist, weiß ich aufgrund von o. a. nicht, woran es liegt und wo ich hinfassen muß. ob's an der installation, an der konfiguration, an ... liegt. hast du nen tip, was ich noch testen kann/soll? grüße von ipu Zitieren
Amstelchen Geschrieben 2. Juli 2007 Geschrieben 2. Juli 2007 d.h. nur aus der SICHT von PHP ist deine oracle-instanz nicht vorhanden?schau mal, ob ORACLE_HOME in der phpinfo() aufscheint, bzw. ob ORACLE_HOME (also z.b. c:\oracle\ora10g\meinhome) in der angabe von PATH vorkommt. s'Amstel Zitieren
ipu Geschrieben 2. Juli 2007 Autor Geschrieben 2. Juli 2007 ja, genau! - als oracle_home ist in der phpinfo() das laufwerk angegeben, in dem die installation von der web-db liegt. als umgebungsvariable ist das verzeichnis mit der instanz angegeben; dort ist auch die tnsnames etc. zu finden. muß ich dann das oracle_home für php ändern, damit das läuft? falls ja, wie geht das, weißt du das? grüße von ipu Zitieren
Amstelchen Geschrieben 2. Juli 2007 Geschrieben 2. Juli 2007 als oracle_home ist in der phpinfo() das laufwerk angegeben, in dem die installation von der web-db liegt. [...] als umgebungsvariable ist das verzeichnis mit der instanz angegeben; dort ist auch die tnsnames etc. zu finden. bitte poste mal die genaue ausgabe. muß ich dann das oracle_home für php ändern, damit das läuft? falls ja, wie geht das, weißt du das? normalerweise sollte PHP einfach erkennen, dass das ORACLE_HOME gesetzt ist, ohne dass man bei einer bestehenden verbindung ohne verwendung von PHP was ändert. s'Amstel Zitieren
ipu Geschrieben 3. Juli 2007 Autor Geschrieben 3. Juli 2007 hi hier die Ausgabe von phpinfo(): ORACLE_HOME - W:\oracle\product\10.2.0\WEBDB PATH - W:\oracle\product\10.2.0\WEBDB\bin;W:\oracle\product\10.2.0\WEBDB\Perl\5.6.1\bin\MSWin32-x86;W:\oracle\product\10.2.0\WEBDB\Apache\Apache\fastcgi;W:\oracle\product\10.2.0\WEBDB\opmn\bin;W:\oracle\product\10.2.0\WEBDB\opmn\lib;W:\oracle\product\10.2.0\WEBDB\opmn\bin;W:\oracle\product\10.2.0\WEBDB\opmn\lib;W:\oracle\product\10.2.0\WEBDB\bin;C:\WINNT;C:\WINNT\system32 hier das, was unter Arbeitsplatz/Eigenschaften/Erweitert/Umgebungsvariablen eingetragen ist: Oracle_home - I:\oracle\product\10.2.0\KTRE Path - W:\oracle\product\10.2.0\WEBDB\bin;W:\oracle\product\10.2.0\WEBDB\jlib;I:\oracle\product\10.2.0\KTRE\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem im prinzip erkennt php das home-verzeichnis von oracle, denke ich. denn die webdb und der apache-server sind auf W:\ installiert, während die instanz und die db zur datenhaltung auf I:\ installiert sind. habe in der php.ini geschaut, da ist nix fest eingetragen. grüße von ipu Zitieren
Amstelchen Geschrieben 3. Juli 2007 Geschrieben 3. Juli 2007 ahaa - zwei ORACLE_HOMEs. - was steht bei ocilogon() in $db drin? - was wird ausgegeben, wenn du getenv("ORACLE_SID") und getenv("ORACLE_HOME") vor dem ocilogon ausgibst? s'Amstel Zitieren
ipu Geschrieben 3. Juli 2007 Autor Geschrieben 3. Juli 2007 hallo, wenn ich alles richtig gemacht habe, dann sowas ahaa - zwei ORACLE_HOMEs. - was steht bei ocilogon() in $db drin? - was wird ausgegeben, wenn du getenv("ORACLE_SID") nix und getenv("ORACLE_HOME") vor dem ocilogon ausgibst? W:\oracle\product\10.2.0\WEBDB grüße von ipu Zitieren
Amstelchen Geschrieben 3. Juli 2007 Geschrieben 3. Juli 2007 setz mal $db auf "WEBDB" und putenv("ORACLE_SID=WEBDB"). s'Amstel Zitieren
ipu Geschrieben 3. Juli 2007 Autor Geschrieben 3. Juli 2007 setz mal $db auf "WEBDB" und putenv("ORACLE_SID=WEBDB"). s'Amstel mmhhh. komischerweise erhalte ich da die gleiche fehlermeldung: "ORA-12154: TNS:Angegebener Connect-Bezeichner konnte nicht aufgelöst werden ..." halt, hab was vergessen. echo putenv("ORACLE_SID=WEBDB"); führte zu Ausgabe von 1 grüße von ipu Zitieren
Amstelchen Geschrieben 3. Juli 2007 Geschrieben 3. Juli 2007 mmhhh. komischerweise erhalte ich da die gleiche fehlermeldung: "ORA-12154: TNS:Angegebener Connect-Bezeichner konnte nicht aufgelöst werden ..." dann kann ich nur spekulieren, dass die beiden ORACLE_HOMEs nicht gänzlich erkannt werden - hat PHP bzw. der apache leserechte auf die tnsnames.ora? echo putenv("ORACLE_SID=WEBDB"); führte zu Ausgabe von 1 dazu brauchts kein echo, das putenv setzt einfach nur die umgebungsvariable ORACLE_SID. scheint aber auch damit nicht zu klappen. s'Amstel Zitieren
ipu Geschrieben 3. Juli 2007 Autor Geschrieben 3. Juli 2007 dann kann ich nur spekulieren, dass die beiden ORACLE_HOMEs nicht gänzlich erkannt werden scheint so. unter dem arbeitsplatz (s.o.) steht nur der pfad zur installation auf I:\ drin. - hat PHP bzw. der apache leserechte auf die tnsnames.ora? keine ahnung. da alles auf einem server installiert ist, dachte, das wäre so. vielleicht ist auch die installation nicht korrekt? allerdings würde bei der installation doch eh ein neues verzeichnis etc. angelegt werden, egal welches laufwerk. hast du denn eine idee, ob ich das mit der installation beeinflussen kann? vielleicht solle ich nur den apache installieren? der server ist nicht in produktion, d.h. ich kann alles neu machen. dazu brauchts kein echo, das putenv setzt einfach nur die umgebungsvariable ORACLE_SID. scheint aber auch damit nicht zu klappen. hab gemerkt. nein, klappt nicht. Zitieren
Amstelchen Geschrieben 3. Juli 2007 Geschrieben 3. Juli 2007 ich würde die kiste deswegen erstmal nicht plattmachen. kannst du nachschauen, ob in den eigenschaften (rechtsklick, sicherheit) der tnsnames.ora "Lesezugriff" für zumindest SYSTEM (bzw. dem user, unter dem die apache.exe läuft) vorhanden ist. s'Amstel Zitieren
ipu Geschrieben 3. Juli 2007 Autor Geschrieben 3. Juli 2007 SYSTEM von I:\ sozusagen hat vollzugriff. einen benutzer der webdb finde ich nicht. allerdings bin ich ehrlich gesagt auch nicht sicher, welcher das sein soll. bei der installation habe ich das kennwort von sys der db eingetragen, auf die die webdb zugriff haben soll sozusagen. und natürlich die sid. ach so. und dann wäre da noch: es gibt nur eine tnsnames.ora-datei. das ganze verzeichnis ...\NETWORK\ADMIN existiert in der Installation der WEBDB nicht. und bei der installation kann man nur html-db angeben, oder wat anderes halt ohne apache-server, oder apache-server ohne html-db. erste und letzte nur in eigenem home-verzeichnis. vielen dank für deine bisherige und hoffentlich noch weitere unterstützung!! Zitieren
ipu Geschrieben 4. Juli 2007 Autor Geschrieben 4. Juli 2007 hi zusammen, jetzt habe ich die oracle-html-db deinstalliert und den oracle-apache als standalone installiert. das problem bleibt bestehen: bei o. g. connect-string kommt weiterhin die fehlermeldung Warning: ocilogon(): _oci_open_server: ORA-12154: TNS:Angegebener Connect-Bezeichner konnte nicht aufgelöst werden in ... wo/wie könnte ich denn wohl php davon überzeugen, den anderen pfad als oracle_home zu verwenden? hat jemand ne ahnung? kann ich das z.b. einfach in die php.ini eintragen?? grüße von ipu Zitieren
ipu Geschrieben 5. Juli 2007 Autor Geschrieben 5. Juli 2007 hi zusammen ich habe jetzt die lösung! Fehlermeldung war Warning: ocilogon(): _oci_open_server: ORA-12154: TNS:Angegebener Connect-Bezeichner konnte nicht aufgelöst werden in ... Lösung 1. folgende Variablen wie beschrieben neu gesetzt: putenv("ORACLE_SID=[sID]"); putenv("ORACLE_BASE=\\oracle\\product\\10.2.0"); putenv("ORACLE_HOME=[laufwerk]:\\oracle\\product\\10.2.0\\[homeverzeichnis]"); putenv("TNS_ADMIN=[laufwerk]:\\oracle\\product\\10.2.0\\[homeverzeichnis]\\NETWORK\\ADMIN"); 2. apache neu gestartet 3. db-connect $dbuser="[username]"; $dbpwd="[passwort}"; $db = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP) (HOST = [host])(PORT=1521)) (CONNECT_DATA=(SERVER=DEDICATED) (SERVICE_NAME=[globaler db-name])))"; $conn = OCILogon("$dbuser","$dbpwd",$db); den string für $db habe ich hier gefunden: PHP Troubleshooting FAQ was genau zum ziel geführt hat, ist mir nicht ganz klar. vermutlich alles. vielen dank nochmals! grüße von ipu Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.