我有一些与 Oracle-11g XE 交互的单元测试。单独运行每个测试工作正常,但是当我运行所有测试时,前几个测试通过,其余测试在尝试创建数据库连接时失败并出现此错误:
ORA-12516, TNS:listener could not find available handler with matching protocol stack
无论我以什么顺序运行测试,都会发生这种情况,因此问题似乎是我耗尽了数据库服务器上的某种资源。
我尝试缓慢运行测试,并检查运行期间使用的连接数:
select count(*) from v$session;
session 数始终徘徊在 26 到 28 之间,并且限制设置为 49,所以我不确定问题出在哪里。
如果我快速运行测试,问题也会变得更糟。当我在没有任何额外延迟的情况下运行它们时,90% 都会因此错误而失败。我在tearDown() 中设置了 sleep ,以更好地了解发生了什么,在这种情况下,只有大约 10% 会失败。
最佳答案
您可能需要增加 PROCESSES 参数的值。还可以执行“lsnrctl servcies”命令来查看服务是否显示为被阻止。我记得一个类似的问题,监听器很聪明,可以计算服务请求的连接数量。在 PMON 通知监听器之前,监听器不会获悉断开连接的情况。这可能是 5 或 10 分钟后。因此,监听器认为您有很多开放连接,并决定主动出击,不再分发更多连接 - 直到 PMON 另有通知。如果增加 PROCESSES 参数,您可能能够增加窗口中可能建立的连接数。
更新:此链接对此进行了描述:https://forums.oracle.com/forums/thread.jspa?threadID=360226
关于oracle - JDBC 连接失败并出现 ORA-12516,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10281523/