MichaelB: Oracle-Datenbankzugriffsprobleme mit Coldfusion unter Linux

Hallo,

folgende Konfiguration:

  • Apache 1.3.23
  • Coldfusion Server 4.5.1 SP2
  • Redhat Linux 7.3

Szenario:
Coldfusion greift via ODBC auf eine entfernte OracleDB zu (zumindest sollte er das).
Klappt aber nicht. Stattdessen kommt die Fehlermeldung:
ODBC Error Code = IM003 (Specified driver could not be loaded)
Obwohl alles korrekt konfiguriert ist.
(mit andere Datenbanken wie PostgreSQL funktioniert es tadellos).

Die gleiche Konstellation unter Redhat Linux 7.2 arbeitet einwandfrei.

Weder auf der Macromedia-Seite noch bei www.cfml.de fand sich ein brauchbarer Hinweis. Die Resultate von Google konnte man ebenfalls vergessen.
Aber vielleicht hat hier ja jemand schon die gleiche Erfahrung gemacht und sogar eine Lösung parat. Ich vermute mal, er kommt mit irgendeiner neueren Bibliothek von Redhat 7.3 nicht klar oder sowas in der Richtung.
Oder der Oracle-Client hat ein Problem. Allerdings funktioniert sqlplus einwandfrei auf diesem Server. Deshalb nehme ich an das Problem liegt wirklich bei Coldfusion.

Werde mal als nächstes versuchen herauszufinden, welche Bibliotheken Coldfusion verwendet. Vielleicht komme ich ja so irgendwie weiter.
Wenn sich was findet, dann werde ich die Lösung hier posten als Antwort auf meine eigene Frage, damit alle was davon haben. :-)

Gruss
   MichaelB

PS:
Jetzt weiß ich auch, warum ich proprietäre Software nicht mag.
Ok .... bei "offenen" Systemen gibt es auch Probleme, aber durch die große Community trifft man eher auf eine Lösung. Und zudem ist man nicht von einen Hersteller abhängig, sondern kann diesen beliebig wechseln.

  1. Hi,

    Coldfusion greift via ODBC auf eine entfernte OracleDB zu (zumindest sollte er das).
    Klappt aber nicht. Stattdessen kommt die Fehlermeldung:
    ODBC Error Code = IM003 (Specified driver could not be loaded)

    hm ... ohne jetzt wirklich die genannten Produkte im Deatil zu verstehen:
    Wie funktioniert denn Deine ODBC-Installation?
    Ich stelle mir ODBC als API vor, die einem Anwendungsprogramm über
    einheitliche Funktionen den Zugriff auf verschiedene Datenbanken erlaubt

    • d. h. es muß ein Treiber her, der diese einheitlichen API-Funktionen
      auf die herstellerspezifischen APIs der konkreten Datenbank abbildet.
      (Und zwar für jedes Datenbankprodukt ein eigener Treiber.)

    Obwohl alles korrekt konfiguriert ist.
    (mit andere Datenbanken wie PostgreSQL funktioniert es tadellos).

    Das ist ja dann offenbar ein anderer Treiber innerhalb Deiner ODBC-
    Installation - und der funktioniert eben.

    Die gleiche Konstellation unter Redhat Linux 7.2 arbeitet einwandfrei.

    Wer hat dort ODBC wie installiert? Setzt Du dieselben Treiber unter 7.2
    und 7.3 ein? Erlaubt der Hersteller (Oracle), daß Du das tust, oder mußt
    Du Dir von Oracle für Linux 7.3 einen angepaßten Treiber holen?

    Weder auf der Macromedia-Seite noch bei www.cfml.de fand sich ein
    brauchbarer Hinweis. Die Resultate von Google konnte man ebenfalls
    vergessen.

    Ich vermute Dein Problem nicht vor, sondern hinter der ODBC-Schnitt-
    stelle. Denn Deine Client-Schicht hat mit dieser ja ganz normale kom-
    munizieren können und eine vernünftige Fehlermeldung erhalten.
    Ich würde Google also nach der Kombination aus ODBC und Oracle fragen.

    Oder der Oracle-Client hat ein Problem. Allerdings funktioniert
    sqlplus einwandfrei auf diesem Server. Deshalb nehme ich an das
    Problem liegt wirklich bei Coldfusion.

    Ich vermute, das Problem liegt in der Verbindungsschicht zwischen
    beiden - eben in Deiner ODBC-Installation.
    Daß sqlplus funktioniert, spricht dafür, daß der Oracle-Teil in sich
    korrekt ist (sofern Du den Oracle-Treiber für ODBC davon ausnimmst).

    Wenn sich was findet, dann werde ich die Lösung hier posten als
    Antwort auf meine eigene Frage, damit alle was davon haben. :-)

    Die erste Maßnahme, die ich ergreifen würde, wäre in diesem Fall,
    die Fehlermeldung wörtlich zu nehmen, also mir anzusehen, wie man in
    dieses ODBC einen Oracle-kompatiblen Treiber hinein bekommt.

    Viele Grüße
          Michael

    1. Hallo,

      na sowas. Noch ein Michael. *freu*

      Coldfusion greift via ODBC auf eine entfernte OracleDB zu (zumindest sollte er das).
      Klappt aber nicht. Stattdessen kommt die Fehlermeldung:
      ODBC Error Code = IM003 (Specified driver could not be loaded)

      hm ... ohne jetzt wirklich die genannten Produkte im Deatil zu verstehen:
      Wie funktioniert denn Deine ODBC-Installation?
      Ich stelle mir ODBC als API vor, die einem Anwendungsprogramm über
      einheitliche Funktionen den Zugriff auf verschiedene Datenbanken erlaubt

      • d. h. es muß ein Treiber her, der diese einheitlichen API-Funktionen
        auf die herstellerspezifischen APIs der konkreten Datenbank abbildet.
        (Und zwar für jedes Datenbankprodukt ein eigener Treiber.)

      Den Oracle-ODBC-Treiber bringt Coldfusion mit und dieser verwendet dann den installierten Oracle-Net8-Client.
      Die ODBC-Treiber werden mit der Coldfusion-Installation eingerichtet.

      Obwohl alles korrekt konfiguriert ist.
      (mit andere Datenbanken wie PostgreSQL funktioniert es tadellos).
      Das ist ja dann offenbar ein anderer Treiber innerhalb Deiner ODBC-
      Installation - und der funktioniert eben.

      Jo .... er wird auf identische Weise "installiert" wie der Oracle-Treiber.

      Die gleiche Konstellation unter Redhat Linux 7.2 arbeitet einwandfrei.
      Wer hat dort ODBC wie installiert? Setzt Du dieselben Treiber unter 7.2
      und 7.3 ein? Erlaubt der Hersteller (Oracle), daß Du das tust, oder mußt
      Du Dir von Oracle für Linux 7.3 einen angepaßten Treiber holen?

      Wie gesagt. Das macht alles Coldfusion mit dem ODBC. Und der OracleClient ist identisch mit dem auf meiner Redhat 7.2 Maschine.
      Ich habe die beiden Maschinen sonst auch auf identische Weise installiert und konfiguriert und das auch mehrmals und auf verschiedener Hardware. Es handelt sich also wirklich nicht um ein einmaliges Versehen. Es hängt mit Redhat Linux 7.3 zusammen.

      Weder auf der Macromedia-Seite noch bei www.cfml.de fand sich ein
      brauchbarer Hinweis. Die Resultate von Google konnte man ebenfalls
      vergessen.
      Ich vermute Dein Problem nicht vor, sondern hinter der ODBC-Schnitt-
      stelle. Denn Deine Client-Schicht hat mit dieser ja ganz normale kom-
      munizieren können und eine vernünftige Fehlermeldung erhalten.

      Eine vernünftige Fehlermeldung wäre detailierter. Das er den Treiber nicht laden kann ist eine ziemlich globale Aussage. Besser wäre, wenn er noch sagen könnte warum (ob ihm eine Datei fehlt und wenn ja welche usw. von mir aus auch ein StackTrace oder dergleichen).
      Die Log-Dateien geben absolut nix her. Und den Log-Level ändern kann man ebenfalls nicht.

      Ich würde Google also nach der Kombination aus ODBC und Oracle fragen.

      War sinnlos. Nix brauchbares gefunden.

      Gruss
         MichaelB

  2. Hallo,

    Klappt aber nicht. Stattdessen kommt die Fehlermeldung:
    ODBC Error Code = IM003 (Specified driver could not be loaded)

    Vielleicht überprüfst Du noch folgendes (gehört bei mir zu den Standardprüfroutinen bei Oracle-Problemem):

    • Sind Die Oracle-spezifschen Environmentvariablen  für den
        Coldfusion-Prozeß gesetzt?
        Manchmal werden das Environment nur für interaktive Prozesse gesetzt,
        nicht aber für daemons und deren Kindprozesse.
    • Überprüfe tnsnames.ora bzw sqlnet.ora auf korrekte Einstellungen.
        Einige Clients haken, wenn man in sqlnet.ora z.B eine default_domain
        definiert hat, und in der tnsnames.ora den DB-Eintrag keine domain
        besitzt.

    Grüße
      Klaus

    1. Hallo,

      Klappt aber nicht. Stattdessen kommt die Fehlermeldung:
      ODBC Error Code = IM003 (Specified driver could not be loaded)

      Vielleicht überprüfst Du noch folgendes (gehört bei mir zu den Standardprüfroutinen bei Oracle-Problemem):

      • Sind Die Oracle-spezifschen Environmentvariablen  für den
          Coldfusion-Prozeß gesetzt?
          Manchmal werden das Environment nur für interaktive Prozesse gesetzt,
          nicht aber für daemons und deren Kindprozesse.

      Ja die Umgebungsvariablen sind gesetzt. Und wie gesagt eine identische Installation/Konfiguration hab ich auch auf Redhat 7.2, wo es ja dann funktioniert.

      • Überprüfe tnsnames.ora bzw sqlnet.ora auf korrekte Einstellungen.
          Einige Clients haken, wenn man in sqlnet.ora z.B eine default_domain
          definiert hat, und in der tnsnames.ora den DB-Eintrag keine domain
          besitzt.

      Wenn da irgendwas nicht stimmen würde, würde wohl kaum sqlplus funktionieren, oder?

      Trotzdem Danke.

      Gruss
         MichaelB