Oracle OLEDB连接池和无效连接

时间:2010-06-08 12:20:27

标签: oracle connection oledb ado pooling

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

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

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

由于 Mubashir

4 个答案:

答案 0 :(得分:1)

如果您以编程方式执行此操作,请使用try块,以便在发生某些事情时,它不会失败。使用try块,您可以捕获异常并忽略它,以便避免错误。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Oracle\KEY_orac

其中KEY_orac是KEY_

键名称为ORAMTS_CONN_POOL_TIMEOUT,默认值为120。

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

答案 3 :(得分:-1)

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