我有一个我编写的应用程序,它使用 OCI 连接到 Oracle 数据库。数据库最近已升级到 Oracle 18,此后应用程序中的数据库搜索随机停止工作。
我已将问题缩小到这一点。当应用程序连接到数据库时,它会运行一些ALTER SESSION
命令以在条件下禁用区分大小写LIKE
(以便我可以搜索“smith”并仍然找到“Smith”)。几个小时后,网络断开 TCP 连接。第二天早上,当有人试图访问系统时,Oracle 客户端透明地重新连接并执行查询。
问题是这种重新连接是在我的代码不知道的情况下发生的,显然是由 Oracle 客户端本身进行的,并且在重新连接后它不会重新运行原始ALTER SESSION
命令。我们的 DBA 向我提供了一个审计日志,其中显示了会话 ID 的更改、一次新的LOGON
尝试和一次ALTER SESSION
设置时区的运行(这不是来自我的代码,也出现在原始连接中)。
这意味着我的应用程序按正常方式向数据库发出查询,没有意识到有任何中断,但突然它们变得区分大小写并且用户开始抱怨搜索没有返回任何结果。
使用以前的 Oracle 服务器版本,如果断开连接,我的代码会收到错误,并且代码会尝试重新连接,并且作为重新连接的一部分,它会ALTER SESSION
再次运行命令,这样系统的行为就不会发生变化.
我找不到任何关于此自动重新连接功能或如何调整它的信息,所以有什么方法可以保留ALTER SESSION
更改以便在重新连接后重新应用它们,或者禁用此行为并向代码返回错误如果像过去那样失去连接?
客户端是较旧的 11.2 版本,升级它并不是很实用,但由于它在服务器升级之前就可以工作,所以我认为该版本没问题。