我使用的是 weblogic JDBC 数据源,我的数据库是 Oracle 10g,下面是配置。
它曾经工作正常,但突然开始出现问题,请参阅下面的异常。
Weblogic JDBC datasource,java.sql.SQLException: Cannot obtain XAConnection weblogic.common.resourcepool.ResourceLimitException: No resources currently available in pool
<?xml version="1.0" encoding="UTF-8"?> <jdbc-data-source
xmlns="http://www.bea.com/ns/weblogic/90" xmlns:sec="http://www.bea.com/ns/weblogic/90/security" xmlns:wls="http://www.bea.com/ns/weblogic/90/security/wls" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/ns/weblogic/920 http://www.bea.com/ns/weblogic/920.xsd"> XL-Reference-DS
jdbc:oracle:oci:@abc.COM oracle.jdbc.driver.OracleDriver user DEV_260908 password password dll ocijdbc10 protocol oci oracle.jdbc.V8Compatible true baseDriverClass oracle.jdbc.driver.OracleDriver
1 100 1 true SQL SELECT 1 FROM DUAL
DataJndi OnePhaseCommit
此异常发生在连接用户只有一个的开发环境中。
我知道这与池最大大小有关,但我也怀疑这可能是由于 Oracle,可能是 Oracle 无法创建连接。
我的问题:
最佳答案
听起来有些东西正在逐渐泄漏连接,正如您似乎怀疑的那样,并且您最终会达到 JDBC 最大池大小。我认为您不会首先达到 Oracle 限制,因为您会遇到 ORA 异常,并且也无法直接连接到数据库。
您可以将数据源配置为从 WebLogic 控制台收集配置文件信息;从域结构菜单中,转到服务->JDBC->数据源,选择您的连接,然后转到配置下的诊断选项卡。但是您也许可以从池的基本统计数据中得到一个粗略的想法;转到 environment->servers,选择您的服务器,然后查看正在监控的 JDBC 选项卡。这显示了事件连接和高水位线。如果其中任何一个与您的最大池大小相同,那么这就是您正在泄漏的一个很好的迹象。
从 Oracle 方面,您可以查看 show parameters sessions
允许的 session 数。 ,还需要查show parameters processes
这可能会进一步限制它(其中一些是像 pmon
这样的内部进程所需要的)。您可以通过类似 select count(*) from v$session where username = 'DEV_260908';
的内容查看您有多少打开的连接。 .基于错误,我不希望它非常接近 session /进程限制,但应该与控制台的事件连接计数相匹配。
关于Weblogic JDBC 数据源提供 "No resources currently available in pool",只有 1 个事件连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2676286/