4

我们正在使用 ADO 访问 Oracle 10g 第 2 版,Oracle 10g 的 Oledb 提供程序。我们正面临连接池的一些问题。数据库驻留在远程计算机上,并且连接池正在按应有的方式进行。但是如果远程机器由于某种原因宕机,连接将从池中返回,并且对该连接的查询失败。当此连接关闭时,它会返回到池中而不是无效。随后的连接打开请求成功但查询失败。这是奇怪的行为,根据 OLEDB 规范,提供者必须支持 DBPROP_CONNECTIONSTATUS 属性,因此在无效连接的情况下,它不会返回到池中。

当远程机器启动时,事情变得很奇怪。池中的连接仍然无效,虽然连接打开成功,但连接查询失败。Oracle OLEDB 无法再连接到服务器,我们必须重新启动我们的应用程序。好吧,这是不受欢迎的,因为我们的应用程序是关键应用程序。

关于如何克服这一点的任何想法。

谢谢穆巴希尔

4

4 回答 4

1

如果您以编程方式执行此操作,请使用 try 块,这样如果确实发生了某些事情,它就不会失败。使用 try 块,您可以捕获异常并忽略它,从而消除错误。

您可以通过在连接返回池之前将连接标记为无效来告诉池不接受无效连接。

于 2010-11-10T00:52:23.153 回答
0

默认情况下,连接会在 10 分钟后恢复。时间可以通过 oledb 提供者的根键下的注册表键 SPTimeout 来设置。

于 2011-10-07T12:15:34.630 回答
0

实际上,对于此 Oracle 11 32 位 OLEDB 安装,默认连接池超时至少为 120 秒。您可以在以下位置找到注册表设置:

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Oracle\KEY_orac

其中 KEY_orac 是 KEY_<oracle_home_name>

键名为 ORAMTS_CONN_POOL_TIMEOUT,默认值为 120。

您似乎无法在连接字符串级别设置连接池参数。

于 2020-12-07T04:14:43.630 回答
-1

在大多数连接池实现中,可以在使用之前检查连接。例如:您定义了一个检查查询,例如 select * from dual,如果您从池中获取连接,则将执行此查询。如果失败,则连接将从池中排除并打开一个新连接。

于 2010-11-10T08:07:53.543 回答