使用nodejs的SESSIONS_PER_USER限制

时间:2017-10-04 15:54:10

标签: node.js oracle ubuntu-14.04 oracledb

我几周来一直在努力解决这个问题:

由于某种原因,我们连接到另一台机器上的oracle数据库的nodejs脚本开始出现SESSIONS_PER_USER限制错误,但我们没有向数据库打开任何其他连接。我尝试了另一个用户,但它返回完全相同的错误。

最奇怪的是,这项服务已运行数周,这是第一次给我们这个错误。

我们使用oracledb(https://github.com/oracle/node-oracledb)模块连接数据库。

我们询问了支持团队,但显然他们可以使用我们的用户连接数据库,但是当我们使用我们机器中的帐户(ubuntu服务器14.04)时,它会出现此错误。我试着寻找可能的"缓存"我们机器内部的会话或连接,但我在谷歌上找不到有关此事的大量帮助...

如果有人能就这个问题给我一些帮助,我真的很感激,因为我不知道我还能做些什么。

提前致谢。

2 个答案:

答案 0 :(得分:1)

2是任何配置文件的一个非常低的SESSIONS_PER_USER值。根据您的应用程序配置文件将其提升回UNLIMITED。

应用程序或用户需要多个连接的原因有很多:

  1. 后台会话 - 许多工具和应用程序会自动创建一个或多个后台会话。这可能允许IDE运行并发语句,或者可能用于在打开Windows时异步检索元数据。
  2. 调试 - Oracle在调试时自动创建后台会话。
  3. 并行性 - 并行语句很容易产生数十个或数百个会话。
  4. Sniped connections - 如果您的数据库设置了非活动超时,则某些会话将被终止,但不会立即删除。他们有时会出现在" sniped"在GV$SESSION中,除了重新启动数据库或等待之外,没有办法摆脱它们。即使客户端没有任何连接,这些会话仍会违反您的限制。
  5. 连接池 - 我不熟悉您的应用程序设置,但我认为现在大多数应用程序会自动创建多个连接。
  6. 日常使用 - 许多人经常使用不同的工具同时连接到数据库,或者使用一个工具打开超过窗口。
  7. 如果有人说,"但我们的安全规则!",请他们阅读DoD Security Technical Implementation Guide (STIG)。几乎可以肯定,他们的规则或某些安全审核的结果都是基于该文件的。没有任何东西反对拥有大量或无限数量的并发会话。您只需在特定于站点的规则中证明这一点。

    2也是一个非常低的值,用于防止不必要的呼叫或阻止大量的开放连接。

    很难预测不同程序在达到这个限制时会如何突破。您无法找到活动会话并不奇怪 - 也许程序会尝试自动生成X线程并立即将其全部杀死,如果其中一些线程失败的话。

    请您的管理员完整地解释 他们想要完成的工作以及原因。

    我的猜测是数据库配置不正确,并且存在任意稀缺的资源。例如,参数PROCESSES和SESSIONS通常默认为低值。如果这些值保持在较小的值,如100,则会出现问题,用户必须争夺连接。

    减少数据库中的会话数会很有帮助。但限制2是不现实的。我已经看到很多数据库在旧硬件上运行,有数千个会话。

答案 1 :(得分:1)

我自己回答这个问题,因为发生的事情是IT团队在我们开始遇到问题的那一天改变了一些配置......用户配置从无限制的请求到2.在我们的代码中我们使用的是async(nodejs)方法调用eachLimit,你可以在其中分配一个极限迭代计数,它是2但不知何故使它崩溃(即使极限为2)。

解决方案:删除迭代器并逐个手动(仅4个元素),无论如何它仍然很苛刻,因为我们每天都要完成这项任务。

感谢您的帮助!