私たちは大きなプログラムを持っています、BDE + oracleを使って、delphiによって開発されたもの。 3つのスレッドを使用してDB操作を行います。 (1つのデーモンスレッド、1つのデータは、スレッド、1つのチェックスレッドを収集)BDEマルチスレッドエラー:ora-12560に遭遇したとき、TDatabaseを再起動できません
私たちは、この構造を使用します。
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が発生し、私たちのプログラムは接続を再開することができず、クエリ実行時にこのエラーを報告し続けます。
コードを確認して一週間をデバッグしても解決できない場合は、 同じ問題が発生していますか?
編集:
私たちは、このテストケースがあります。
3のプログラムを、それぞれ(1秒スリープして)一つのスレッドを実行し、そして0.5の間 - 1時間、彼らは皆、同じ時刻に失敗しました。 現在、私は回避策として自動再起動プログラムのmachanismに取り組んでいます。
BDEをAdoに変更したいと考えていますが、Linuxワインがサポートしているかどうかはわかりません。 – linjunhalida
"db.open"コードはどこにありますか? –
クエリが開くと、dbが開きます。 – linjunhalida