我们有一个大程序,使用BDE + oracle,由delphi开发,我们使用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,我们的程序无法重启连接,并且在执行查询时一直报这个错误。
我们审查了代码,调试了一个星期,仍然无法解决,你们遇到同样的问题吗?
编辑:
我们有这个测试用例:
3个程序,每个运行一个线程(睡眠1秒),并且在0.5-1小时之间,它们都同时失败。(3个数据库操作,1个Indy9 ftp客户端...)
所以我认为 BDE 或 Windows 套接字有问题...目前我正在研究自动重启程序机制作为解决方法。