(很长的帖子,很抱歉,但这将有助于提供清晰的图片)
DB:Oracle 12c
主机:Linux 6.10
服务器位置:Chi和波士顿
最近,我们将Oracle数据库移到了位于不同网络上的波士顿的新服务器位置。我们在两个服务器上都运行着多个数据库。
问题::当用户跨不同服务器/网络位置连接时,ctrl + c断开用户sqlplus会话。
错误:ORA-03135:连接失去联系。
Oracle客户端版本在两个位置都相同。
示例: 1.来自Chi的用户启动sqlplus会话并连接到波士顿的数据库,使用ctrl + c杀死当前查询,但不是终止查询并返回sqlplus,而是提示他的会话断开连接,因此必须再次登录。
如果同一网络上的用户连接到任何数据库,则ctrl + c不会断开会话。 (Chi-> Chi很好,Bos-> Bos很好)。
网络团队或Linux系统管理员最终没有发现任何问题,也不想花时间进行调查。
我以某种方式感觉到网络之间的某些内容无法解释正确发送SIGINT信号的ctrl + c。我既不是网络专家,也没有过类似行为。
有人知道导致会话断开连接或任何指针的原因吗?
答案 0 :(得分:0)
sqlplus.exe基本上一直存在错误。它至少在2000年左右就出现在工具中(如果我没记错的话,它的版本是3.x左右)。运行查询,在屏幕上滚动输出时,只需按一次Ctrl + C,如果您在错误的时刻捕获了查询,则整个工具将退出。该错误的最大挫败之一是Oracle似乎甚至不愿承认该错误的存在,更不用说对其进行修复了。发生错误的情况至少有两种,其中一种很容易重现-运行查询,时间需要多长时间,再次运行以及何时接近尾声-但数据仍在屏幕上滚动-仅按一次CtrlC。可能需要一两次尝试才能确定正确的时间,但是只需花费很少的精力即可重现该错误。这种情况下发生的情况很容易理解,在您按Ctrl + C时,与数据库的交互已停止-但是,如果屏幕正在滚动,那么您如何知道查询即将结束呢?通常不可能保证您在那次机会之窗期间永远不要按ctrl + C键-任何人都可以说这不是bug,这超出了我的范围。
至少有一种情况发生错误,但是通常很难重现-除了当它发生时,那时很容易重现,因此我怀疑通信中存在某种定时问题与数据库。运行一个查询,假设您意识到where子句将返回大量数据,因此当它开始显示数据时,请按Ctrl + C。通常,这是安全的,但有时不安全-工具将退出。发生这种情况时,请重新启动sqlplus并重新运行相同的查询,然后在开始滚动后再次按Ctrl + C,再次退出该工具。我无意中多次运行了此测试。发生这种情况时,您可以反复进行相同的测试,出于娱乐目的,在恢复工作之前,我已经连续至少六次终止会话(通过输入正确的where子句而不按Ctrl + C)
无论如何,关键是每当有人轻易回答您仅应按Ctrl C一次时,这都会令人感到沮丧。绝对不能保证您在运行sqlplus.exe时会安全