JDBC连接因ORA-12516而失败

时间:2012-04-23 13:29:33

标签: oracle jdbc oracle-xe

我有一些与Oracle-11g XE对话的单元测试。单独运行每个测试工作正常,但是当我全部运行它们时,前几个通过,其余的在尝试创建数据库连接时失败并出现此错误:

ORA-12516, TNS:listener could not find available handler with matching protocol stack

无论我运行测试的顺序如何,都会发生这种情况,所以问题似乎是我在数据库服务器上使用了某种资源。

我尝试慢慢运行测试,并在运行期间检查正在使用的连接数:

select count(*) from v$session;

会话数总是在26到28之间徘徊,限制设置为49,所以我不确定问题是什么。

如果我快速运行测试,问题也会变得更糟。当我在没有任何延迟的情况下运行它们时,90%会因此错误而失败。我在tearDown()中进行了一次睡眠,以便更好地了解发生了什么,在这种情况下只有大约10%的失败。

3 个答案:

答案 0 :(得分:3)

您可能需要增加PROCESSES参数的值。还要执行“lsnrctl servcies”命令以查看该服务是否显示为已阻止。我记得一个类似的问题,其中监听器是智能的并且计算为服务请求的连接数。在PMON通知之前,监听器不会了解断开连接。这可能是5或10分钟后。因此,听众认为你有很多开放的联系,并决定积极主动,不再分发连接 - 直到PMON告知其他情况。如果增加PROCESSES参数,则可能会使自己达到可能在窗口中建立的连接数。

更新:此链接描述了它:https://forums.oracle.com/forums/thread.jspa?threadID=360226

答案 1 :(得分:0)

查看v $参数中的会话和进程限制以及alert.log和listener.log 答案就在那里

答案 2 :(得分:0)

几年后......

请参阅:http://www.eddgrant.com/blog/2010/01/20/increasing-the-number-of-processes-in-oracle-xe.html

在Sql Plus中运行它解决了我的问题:

SQL> alter system set sessions=300 scope=spfile; 
SQL> alter system set processes=300 scope=spfile;