我几周来一直在努力解决这个问题:
由于某种原因,我们连接到另一台机器上的oracle数据库的nodejs脚本开始出现SESSIONS_PER_USER限制错误,但我们没有向数据库打开任何其他连接。我尝试了另一个用户,但它返回完全相同的错误。
最奇怪的是,这项服务已运行数周,这是第一次给我们这个错误。
我们使用oracledb(https://github.com/oracle/node-oracledb)模块连接数据库。
我们询问了支持团队,但显然他们可以使用我们的用户连接数据库,但是当我们使用我们机器中的帐户(ubuntu服务器14.04)时,它会出现此错误。我试着寻找可能的"缓存"我们机器内部的会话或连接,但我在谷歌上找不到有关此事的大量帮助...
如果有人能就这个问题给我一些帮助,我真的很感激,因为我不知道我还能做些什么。
提前致谢。
答案 0 :(得分:1)
2是任何配置文件的一个非常低的SESSIONS_PER_USER值。根据您的应用程序配置文件将其提升回UNLIMITED。
应用程序或用户需要多个连接的原因有很多:
GV$SESSION
中,除了重新启动数据库或等待之外,没有办法摆脱它们。即使客户端没有任何连接,这些会话仍会违反您的限制。如果有人说,"但我们的安全规则!",请他们阅读DoD Security Technical Implementation Guide (STIG)。几乎可以肯定,他们的规则或某些安全审核的结果都是基于该文件的。没有任何东西反对拥有大量或无限数量的并发会话。您只需在特定于站点的规则中证明这一点。
2也是一个非常低的值,用于防止不必要的呼叫或阻止大量的开放连接。
很难预测不同程序在达到这个限制时会如何突破。您无法找到活动会话并不奇怪 - 也许程序会尝试自动生成X线程并立即将其全部杀死,如果其中一些线程失败的话。
请您的管理员完整地解释 他们想要完成的工作以及原因。
我的猜测是数据库配置不正确,并且存在任意稀缺的资源。例如,参数PROCESSES和SESSIONS通常默认为低值。如果这些值保持在较小的值,如100,则会出现问题,用户必须争夺连接。
减少数据库中的会话数会很有帮助。但限制2是不现实的。我已经看到很多数据库在旧硬件上运行,有数千个会话。
答案 1 :(得分:1)
我自己回答这个问题,因为发生的事情是IT团队在我们开始遇到问题的那一天改变了一些配置......用户配置从无限制的请求到2.在我们的代码中我们使用的是async(nodejs)方法调用eachLimit,你可以在其中分配一个极限迭代计数,它是2但不知何故使它崩溃(即使极限为2)。
解决方案:删除迭代器并逐个手动(仅4个元素),无论如何它仍然很苛刻,因为我们每天都要完成这项任务。
感谢您的帮助!