delphiによって開発されたBDE+oracleを使用した大きなプログラムがあります。3つのスレッドを使用してDB操作を実行し、別々のTSessionを使用しています。(デーモンスレッド1つ、データ収集スレッド1つ、チェックスレッド1つ)
この構造を使用します:
TQuery-> TDatabase-> TSession
このメソッドを使用してクエリを実行します。
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;
問題は、プログラムが24時間以上実行されると、ora-12560が発生し、プログラムが接続を再開できず、クエリの実行時にこのエラーを報告し続けることです。
コードを確認し、1週間にわたってデバッグしましたが、それでも解決できません。同じ問題が発生しますか?
編集:
このテストケースがあります:
3つのプログラム、それぞれが1つのスレッド(1秒間のスリープ)を実行し、0.5〜1時間の間、すべて同時に失敗しました。(3つのDB操作、および1つのIndy9 ftpクライアント...)
ですから、BDEまたはWindowsソケットに何か問題があると思います...現在、回避策として自動再起動プログラムのメカニズムに取り組んでいます。