ctrl + c 终止用户 sqlplus 连接

ctrl + c kills user sqlplus connection

(很抱歉 post,但这有助于提供清晰的图片)
数据库:Oracle 12c
主持人:Linux 6.10
服务器位置:Chi and Boston

最近我们将 Oracle 数据库移动到位于不同网络上的波士顿的新服务器位置。我们在两台服务器上都有多个数据库 运行。

问题: ctrl + c 在跨不同 server/network 位置连接时断开用户 sqlplus 会话。

错误:ORA-03135:连接丢失。

两个位置的 Oracle 客户端版本相同。

示例: 1. 来自 Chi 的用户启动了 sqlplus 会话并连接到波士顿的数据库,使用 ctrl + c 来终止当前查询,但没有终止查询和 returning sqlplus 提示他的会话已断开连接,他必须重新登录。

  1. 来自波士顿的用户启动了 sqlplus 会话并连接到芝加哥的数据库,使用 ctrl + c 终止查询,但没有出现 sqlplus 提示 return 他的会话断开连接,他必须重新登录。

如果用户在同一网络上连接到任何数据库,ctrl + c 不会断开会话。 (Chi -> Chi 工作正常,Bos -> Bos 工作正常)。

网络团队或 Linux 系统管理员没有发现任何问题,也不想花时间进行调查。

我不知何故感觉网络之间的某些东西没有解释正确发送 SIGINT 信号的 ctrl + c。我不是网络方面的专家,过去也没有经历过类似的行为。

有人知道什么可能导致会话断开或任何指针吗?

sqlplus.exe基本上一直都有bug。它至少从 2000 年左右就开始使用该工具(如果我没记错的话,那是大约 3.x 版本)。 运行 一个查询,当输出在屏幕上滚动时按一次 Ctrl+C,如果您在错误的时刻捕获到查询,整个工具将退出。这个错误最大的挫折之一是 Oracle 似乎甚至不愿意承认这个错误的存在,更不用说修复它了。错误发生时至少有两种情况,其中一种很容易重现 - 运行 一个查询,时间需要多长时间,运行 再次出现,当你接近尾声时 - 但是数据仍在屏幕上滚动 - 按 Ctrl C 一次。可能需要一两次尝试才能确定正确的时间,但只需很少的努力就可以重现错误。在这种情况下发生的事情很容易理解,当您按下 Ctrl+C 时,与数据库的交互已经停止——但是如果屏幕在滚动,那么您怎么知道您接近查询的结尾?通常不可能保证您在 window 的错误机会期间永远不会按 ctrl+C - 我无法理解任何人怎么能说这不是错误。

当错误发生时至少还有一种其他情况,但一般很难重现 - 除了当它发生时,那时候很容易重现,所以我怀疑某种时间问题与数据库的通信。 运行 一个查询,假设您意识到您的 where 子句将 return 大量数据,因此当它开始显示数据时,您按下 Ctrl+C。通常这是安全的,但偶尔会不安全 - 该工具将退出。当发生这种情况时,重新启动 sqlplus 并重新 运行 相同的查询,在它开始滚动后再次按 Ctrl+C 一次 - 该工具将再次退出。我不小心 运行 这个测试了很多次。发生这种情况时,您可以一遍又一遍地进行相同的测试,为了娱乐,在我重新开始工作之前,我已经连续终止了我的会话至少六次(通过输入正确的 where 子句而不是按 Ctrl+C) .

无论如何,关键是每当有人轻描淡写地回答你应该小心只按一次 Ctrl C 时,这非常令人沮丧。这绝对不能保证您在运行宁sqlplus.exe

时是安全的