node.js - Nodejs 的 SESSIONS_PER_USER 限制

标签 node.js oracle ubuntu-14.04 node-oracledb

我已经为这个问题苦苦挣扎了几个星期:

出于某种原因,我们连接到另一台计算机中的 Oracle 数据库的 Nodejs 脚本开始因 SESSIONS_PER_USER 限制而出错,但我们没有打开任何其他到该数据库的连接。我尝试了我们拥有的另一个用户,但它返回了完全相同的错误。

最奇怪的部分是该服务已经运行了几周,这是第一次给我们带来这个错误。

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

我们询问了支持团队,但显然他们可以使用我们的用户来连接数据库,但是当涉及到使用我们的计算机(ubuntu 服务器 14.04)中的帐户时,它会出现此错误。我尝试在我们的机器内搜索可能的“缓存” session 或连接,但我在谷歌上没有找到关于此事的很多帮助...

如果有人能为我提供有关此问题的帮助,我将非常感激,因为我不知道还能做什么。

提前致谢。

最佳答案

2 对于任何配置文件来说都是一个低得离谱的 SESSIONS_PER_USER 值。对于您的应用程序配置文件,将其调回“UNLIMITED”。

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

  1. 后台 session - 许多工具和应用程序会自动创建一个或多个后台 session 。这可能允许您的 IDE 运行并发语句,或者可能用于在您打开窗口时异步检索元数据。
  2. 调试 - Oracle 在调试时自动创建后台 session 。
  3. 并行性 - 并行语句可以轻松生成数十或数百个 session 。
  4. 狙击连接 - 如果您的数据库设置了非事件超时,某些 session 将被终止,但不会立即删除。它们有时会在 GV$SESSION 中显示为“被狙击”,并且除了重新启动数据库或等待之外无法摆脱它们。即使客户端完全没有连接任何内容,这些 session 仍然会计入您的限制。
  5. 连接池 - 我不熟悉您的应用程序设置,但我假设现在大多数应用程序都会自动创建多个连接。
  6. 日常使用 - 许多人经常同时使用不同的工具连接到数据库,或者使用一个工具打开多个窗口。

如果有人说“但是我们的安全规则!”,请让他们阅读 DoD Security Technical Implementation Guide (STIG) 。几乎可以肯定,他们的规则或某些安全审核的结果是基于该文件的。没有什么可以反对拥有大量或无限数量的并发 session 。您只需在特定于站点的规则中证明它的合理性即可。

<小时/>

对于防止不必要的调用或防止大量打开的连接来说,2 也是一个低得离谱的值。

很难预测不同的程序在达到该限制时将如何崩溃。找不到事件 session 并不奇怪 - 也许程序会尝试自动生成 X 个线程,并在其中一些线程失败时立即将其全部杀死。

请您的管理员准确解释他们想要完成的任务以及原因。

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

减少数据库中的 session 数量很有帮助。但限制为 2 是不现实的。我见过很多数据库在旧硬件上运行,有数千个 session 。

关于node.js - Nodejs 的 SESSIONS_PER_USER 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46569202/

相关文章:

javascript - 使用nodejs以 block 的形式发送数据

node.js - 默认的 Firebase 应用不存在。确保在使用任何 Firebase 服务之前调用 initializeApp()。在 FirebaseAppError

node.js - 找不到 Node 全局包的命令

mysql - NOLOGGING 不起作用

java - 将字节数组作为参数传递给oracle中的存储过程

python - 如何在 python 虚拟环境之外使用 Opencv?

javascript - 用于复杂应用程序结构的 NodeJS 本地模块

java - 无法写入 Java 中的文件

cuda - 我能对 'CUDA driver version is insufficient for CUDA runtime version' 做什么?

oracle - 在 Oracle 中发出 COMMIT 之前 INSERT 是如何工作的