Wir haben ein großes Programm, mit BDE + Oracle, entwickelt von Delphi, Wir verwenden 3 Threads zu tun DB-Operationen, sie verwenden getrennte TSession. (1 deamon Gewinde, 1 Daten sammeln Gewinde, 1 Prüfung Gewinde)BDE Multithread Fehler: wenn Begegnung ora-12560, kann TDatabase
Wir verwenden diese Struktur:
TQuery -> TDatabase -> TSession
Wir verwenden diese Methode Abfrage zu tun:
try
qu.close; //TQuery
qu.sql.clear;
qu.sql.add('select foo from db_foos');
qu.open;
except
on e:Exception do
begin
db.close; // db is TDatabase, We use this to auto restart connection when network fail.
error(e.message);
end;
end;
das Problem ist, Wenn unser Programm mehr als 24 Stunden läuft, ora-12560 auftreten, und unser Programm kann die Verbindung nicht neu starten, und melden Sie diesen Fehler beim Ausführen von Abfragen.
Wir hatten Code überprüft, debuggte die ganze Woche lang, und immer noch kann es nicht lösen, kennen Sie das gleiche Problem?
edit:
Wir haben diesen Testfall:
3-Programm, jeden Lauf einen Thread (mit 1 Sekunde Schlaf) und zwischen 0,5 bis 1 Stunden Sie alle zur gleichen Zeit schlugen fehl. (3 DB-Betrieb und 1 Indy9 FTP-Client ...)
Also ich denken, es ist etwas falsch in BDE oder Windows-Socket ist ... Strom I auf einem Auto-Restart-Programm machanism als Behelfslösung arbeite.
Wir wünschen, wir können BDE zu Ado ändern, aber wir wissen nicht, ob Linux-Wein es unterstützt. – linjunhalida
Wo ist der Code "db.open"? –
Wenn die Abfrage geöffnet wird, wird db geöffnet. – linjunhalida