这里是场景...ORACLE/ASP.NET:ORA-2020 - 数据库链接太多......这是什么原因造成的?
我们有一个内部网站运行最新版本的ODAC(Oracle客户端)。它打开数据库连接,运行存储过程或打包方法,然后断开连接。连接池已打开,目前我们在开发和测试环境下都使用11g版本,但在我们的生产环境下使用10gR2。这发生在生产上。
几天前,一个进程开始引发ORA-2020错误。该流程从我们内部网站的网页上调用。用户只需设置日期,点击按钮,并在另一个与网站分开的系统上启动作业。然而,调用本身使用数据库链接来运行一个函数。
我们搜索了SQL,发现它只使用那一个数据库链接。由于这些链接是基于每个会话并且用户不超过默认限制4,因此我们如何获得ORA-2020错误。
我们已经运行了大量的测试以试图超过4的默认限制。从我所记得的情况来看,ODAC在每次连接后运行一次提交,并且我似乎无法运行4个数据库链接,然后运行一个带有1个数据库链接的SQL,并且存在任何错误之后。我可以提出这个错误的唯一方法是如果我运行带有4个DB链接的查询,然后是一个包含数据库链接的函数或动态SQL。我们没有这个问题,因为这个问题是零星的。这并不总是发生。
问题
- 是否有可能连接池是允许用户B使用用户A的连接的初始过程运行之后,因此增加了打开链接数量,如果用户B运行在使用SQL语句更多数据库链接?
- 这是我们应该超过4的限制吗?增加号码的缺点是什么?
- 在从数据库断开连接之前,是否需要显式关闭打开的数据库链接? Oracle文档似乎表明它应该自动发生,但“有时”......不。
经过更多测试后,第一个问题得到解答。至少在我们的11g环境中进行测试时,这绝对是不可能的。为每个事务创建一个连接,并且ODP.NET隐式提交并且连接被关闭并放置在我们的代码中。我们无法抓住另一个连接并使用会话。我们正在添加一些跟踪来查看发生错误时链接是否打开。 – jlrolin 2012-04-09 18:12:59