wir haben ein Kommunikationsproblem zwischen Delphiprogrammen und Oracledatenbanken:
Delphi: 2007 Professional (Win 32) - vereinzelt auch Delphi 7
Oracle (UFT8):
PRODUCT|VERSION|STATUS
NLSRTL |11.1.0.6.0|Production
Oracle Database 11g Enterprise Edition |11.1.0.6.0|64bit Production
PL/
SQL |11.1.0.6.0|Production
TNS for Linux: |11.1.0.6.0|Production
Der Zugriff aus Delphi auf die Datenbank erfolgt über die ODAC-Komponenten von Core Lab, Version: 6.20.0.11.
Auf Rechnern, auf denen die Programme ausgeführt werden, ist kein Oracleclient erforderlich.
Das Problem tritt auf einigen Rechnern mit und ohne Client auf, auf der Mehrzahl der Rechner tritt es nicht auf, leider aber auch auf dem Produktionssystem.
Alle Rechner laufen unter Windows XP, allerdings mit unterschiedlichem Stand in Bezug auf die Servicepacks und Updates. Eine Systematik, ob bestimmte Stände des Betriebssystems für das Auftreten des Problemes ursächlich sein könnten, ist nicht erkennbar. SP3 geht, SP2 geht nicht oder umgekehrt, ist kein mögliches Ausschlußkriterium, bei allen Ständen gibt es Rechner, mit auftretendem Problem bzw. ohne dieses Problem. Unterschiede in den Ländereinstellungen... konnten wir nicht erkennen. Einige Rechner sind keine physikalischen Rechner, sondern laufen als VMWare (alle auf einem VMWare-Server), auch hier konnten wir keine Systematik in Bezug auf das Auftreten, bzw. Nichtauftreten des Problemes feststellen.
Nun zu dem Problem:
Die Programme führen mehr oder weniger aufwändige
SQL-Abfragen aus, erarbeiten die Ergebnisse und schreiben die Daten mittels der TOraLoader-Komponente bzw. mittels der TOraQuery in die Datenbank.
Auf Seite des Datenbankservers kann man sehen, dass die Abfragen vom Programm an die Datenbank geschickt wurden und die Datenbank die Ergebnisse bereitstellt und darauf wartet, dass der Client sie abholt. An dieser Stelle bleibt der Client stehen, hat keine CPU-Last und holt auch keine Daten. Dieser Zustand bleibt unverändert, bis man das Delphiprogramm per Taskmanager abbricht.
Einige Programme können dahingehend gesteuert werden, dass man ihnen per Eingabe einen Teilbereich (über die technischen Schlüssel) der Datenmenge angibt, der vom Programm bearbeitet werden soll. Hier kann es nun passieren, dass ein Teilbereich abgearbeitet wird, bei einem anderen Teilbereich die oben beschriebene Situation eintritt. Durch weitere Einschränkung der Teilbereiche lässt sich das Problem auf einige Datensätze reduzieren, die einzeln angesteuert das Problem verursachen. Bei vielen Million Datensätzen kann man hier aber unmöglich alle "Problemfälle" per "Try and Error" ermitteln. Die bisher manuell ermittelten Problemfällen lassen keinerlei Besonderheiten erkennen. Das Problem betrifft die unterschiedlichsten Datenbanktabellen, so dass man auf Datenbankseite auch kein einzelnes "Problemkind" ausfindig machen kann.
Hat jemand eine Idee, woran dieses Verhalten liegen kann oder wie man sich der Ursache nähern kann?
PS.: Habe leider nur bis Freitag Zeit, das Problem zu lösen