Zum Inhalt springen

php connect oracle


Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...