Klaus1: Zugriff auf (uralte) Oracle-Datenbank

Hallo,

ich habe die "ehrenfolge" Aufgabe zu versuchen, ob ich die Datenbanken aus einer uralten Oracle-Datenbank (Version 7.3) ausgelesen und damit in eine andere Datenbank (PostgreSQL) übertragen bekomme.

Diverse Migrations-Tools habe ich zwar gefunden, kommen aber nicht mit dieser Steinzeit-Version zurecht.

Daher meine Idee mit einem auch recht altem Webserver und ODBC den Zugriff zu ermöglichen. Der ODBC-Treiber (32bit) ist installiert und funktioniert auch. Zumindest konnte ich a) eine Verbindung über Oracel ODBC 23Bit Test aufbauen und diverse SQL-Abfragen senden und ein Ergebnis bekommen. b) über die Kommando-Zeile ein php -r "var_dump($conn=odbc_connect('DB','username','passwort'));" als Ergebnis ein resource(4) of type (odbc link) bekommen, was ich als erfolgreichen Verbindungsaufbau interpretiere.

Wenn ich aber selbiges innerhalb eines PHP-Scripts versuche, erhalte ich die folgende Fehlermeldung:

Warning: odbc_connect(): SQL error: Aufgrund des Systemfehlers 126: 
Das angegebene Modul wurde nicht gefunden. 
(Oracle73, C:\ORANT\ODBC\sqo32_73.dll) konnte der angegebene Treiber nicht geladen werden., 
SQL state IM003 in SQLConnect in D:\www\test\odbctest.php on line 47

Um sicherzustellen, dass das PHP-Script die Dateien findet, habe ich im Script ein var_dump ($files1 = scandir("C:/ORANT/ODBC")); eingebaut. Das mir auch brav den Inhalt des Verzeichnisses anzeigt.

Also woran liegts? Oder bin ich komplett auf dem Holzweg?

LG Klaus

  1. Tach!

    Wenn ich aber selbiges innerhalb eines PHP-Scripts versuche, erhalte ich die folgende Fehlermeldung:

    Warning: odbc_connect(): SQL error: Aufgrund des Systemfehlers 126: 
    Das angegebene Modul wurde nicht gefunden. 
    (Oracle73, C:\ORANT\ODBC\sqo32_73.dll) konnte der angegebene Treiber nicht geladen werden., 
    SQL state IM003 in SQLConnect in D:\www\test\odbctest.php on line 47
    

    Es könnte sein, dass unterschiedliche php.ini genommen werden und darin andere Pfadangabe dafür sorgen, dass Librarys nicht gefunden werden. Eine andere Ursache kann auch sein, dass der PATH unterschiedlich gesetzt ist.

    dedlfix.

    1. Hallo,

      Wenn ich aber selbiges innerhalb eines PHP-Scripts versuche, erhalte ich die folgende Fehlermeldung:

      Warning: odbc_connect(): SQL error: Aufgrund des Systemfehlers 126: 
      Das angegebene Modul wurde nicht gefunden. 
      (Oracle73, C:\ORANT\ODBC\sqo32_73.dll) konnte der angegebene Treiber nicht geladen werden., 
      SQL state IM003 in SQLConnect in D:\www\test\odbctest.php on line 47
      

      Es könnte sein, dass unterschiedliche php.ini genommen werden und darin andere Pfadangabe dafür sorgen, dass Librarys nicht gefunden werden. Eine andere Ursache kann auch sein, dass der PATH unterschiedlich gesetzt ist.

      Es wird die identische php.ini übernommen, das habe ich über die Kommandozeile mittels php --ini und im Browser über <?php phpinfo(); ?> geprüft.

      Kann es sein, dass PATH unterschiedlich gesetzt ist, wenn ich über das Script den Inhalt von c:\orant\odbc anzeigen lasse und im Script die Fehlermeldung angezeigt wird, dass die DLL in c:\orant\odbc nicht gefunden wurde?

      Ich habe in der Umgebungsariable PATH und ORACLE_HOME vom System die beiden Pfade c:\orant und c:\orant\odbc eingetragen. Den Apache-Dienst habe ich neugestartet.

      LG Klaus

      1. Tach!

        Kann es sein, dass PATH unterschiedlich gesetzt ist, wenn ich über das Script den Inhalt von c:\orant\odbc anzeigen lasse und im Script die Fehlermeldung angezeigt wird, dass die DLL in c:\orant\odbc nicht gefunden wurde?

        Es kann sein, dass der PATH ein anderer ist, wenn du Programme am Prompt selbst startest und wenn etwas als Dienst läuft. Das heißt, dein PHP(-Script) am Prompt bekommt deinen PATH zu sehen, das PHP im Webserver möglicherweise nicht (oder einen anderen).

        dedlfix.

        1. Moin,

          Es kann sein, dass der PATH ein anderer ist, wenn du Programme am Prompt selbst startest und wenn etwas als Dienst läuft. Das heißt, dein PHP(-Script) am Prompt bekommt deinen PATH zu sehen, das PHP im Webserver möglicherweise nicht (oder einen anderen).

          Und wie kann ich das feststellen und gegebenenfalls korrigieren?

          LG Klaus

          1. Tach!

            Es kann sein, dass der PATH ein anderer ist, wenn du Programme am Prompt selbst startest und wenn etwas als Dienst läuft. Das heißt, dein PHP(-Script) am Prompt bekommt deinen PATH zu sehen, das PHP im Webserver möglicherweise nicht (oder einen anderen).

            Und wie kann ich das feststellen und gegebenenfalls korrigieren?

            phpinfo() sollte es in einer der Sektionen anzeigen, aber auch getenv() kann ein Ergebnis liefert.

            Ich weiß ja nicht, wie in deinem Fall der Webserver gestartet ist, und ob überhaupt der PATH das Problem ist. Den PATH (allgemein eine Umgebungsvariable) für eine einzelne Anwendung zu setzen, bekommt man unter Windows nur umständlich hin, hat Tante Google gesagt. Am einfachsten ist noch, eine Batch-Datei zu schreiben.

            Vielleicht muss nicht der PATH korrigiert werden, auch eine absolute Angabe zum Verzeichnis der DLLs, oder das Kopieren der DLLs in das Verzeichnis der php.exe kann helfen.

            dedlfix.

  2. Uralt?

    Wirklich das Original aus Delphi?

    1. Moin,

      keine Ahnung, ich meine die DB war schon da, als ich vor fast 20 Jahren in der Firma angefangen hatte. Das Betriebssystem ist ein United Linux 1.0.

      LG Klaus

      1. Hallo Klaus1,

        Orakel von Delphi

        😂 Rolf

        --
        sumpsi - posui - clusi
    1. Aus dem Archiv einen alten Client liefern lassen:
    2. SELECT INTO OUTFILE ...
    3. Import.