2 对于任何配置文件来说都是一个低得离谱的 SESSIONS_PER_USER 值。为您的应用程序配置文件将其提升回 UNLIMITED。
应用程序或用户需要多个连接的正当理由有很多:
- 后台会话- 许多工具和应用程序会自动创建一个或多个后台会话。这可能允许您的 IDE 运行并发语句,或者可能用于在您打开窗口时异步检索元数据。
- 调试——Oracle 在调试时自动创建后台会话。
- 并行性 - 并行语句可以轻松产生数十或数百个会话。
- 狙击连接- 如果您的数据库设置了非活动超时,一些会话将被终止但不会立即删除。它们有时会在 中显示为“被狙击”
GV$SESSION,除非重新启动数据库或等待,否则无法摆脱它们。即使客户端没有任何连接,这些会话仍会计入您的限制。
- 连接池- 我不熟悉您的应用程序设置,但我认为现在大多数应用程序都会自动创建多个连接。
- 日常使用- 很多人经常同时使用不同的工具连接到数据库,或者使用一个打开多个窗口的工具。
如果有人说“但是我们的安全规则!”,请他们阅读DoD 安全技术实施指南 (STIG)。几乎可以肯定,他们的规则或某些安全审计的结果是基于该文件。没有什么可以反对拥有大量或无限数量的并发会话。您只需要在特定于站点的规则中证明它的合理性。
对于防止不必要的呼叫或防止大量打开的连接,2 也是一个低得离谱的值。
很难预测不同的程序在达到该限制时会如何中断。找不到活动会话也就不足为奇了——也许程序会尝试自动生成 X 线程并在其中一些失败时立即将它们全部杀死。
请您的管理员准确解释他们要完成的工作以及原因。
我的猜测是数据库配置不正确,存在任意稀缺资源。例如,参数 PROCESSES 和 SESSIONS 通常默认为低值。如果这些值保持在很小的值,比如 100,那么就会出现问题,用户必须争夺连接。
减少数据库中的会话数会很有帮助。但是限制为 2 是不现实的。我见过大量数据库在旧硬件上运行,有数千个会话。