我正在使用 Azure 混合连接从在 Azure Linux 上的 Docker 中运行的 Dotnet 5 API 连接到本地 Oracle 12 服务器。我们所有的数据库查询都运行返回游标的存储过程。服务器每周左右会出现一次连接不足的情况。
我对 Oracle 服务器所看到的内容的可见性有限(即没有),并且在服务器上没有管理员权限。我可以请管理员为我运行诊断查询。目前有多个应用程序实例连接到同一个 Oracle 实例。
据我所知,该应用程序以有序的方式关闭并处理连接。我没有覆盖连接字符串中的任何默认连接池设置。我使用来自 Nuget (3.21.1) 的最新 Oracle.ManagedDataAccess.Core 包。
我想知道当池清除未使用的连接并且服务器无限期地保留这些连接时,混合连接(它在后台使用服务总线!)是否无法正确地与服务器通信。如果您在 Azure Hyrbid 连接上大规模使用 Oracle,我很想知道它在较长时间内是否稳定,以及连接池是否正常工作。
更新:仍然没有解决方案,我发现了有关此情况的先前报告,并且我对 Oracle 无法与 HCM 正常合作的预感似乎正在巩固。查看应用服务器插槽的此 Netstat 输出,例如:
~# netstat -p | grep 1521
tcp 0 0 127.0.0.14:1521 localhost:49192 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:46480 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:42372 CLOSE_WAIT -
tcp 0 0 localhost:42452 127.0.0.14:1521 FIN_WAIT2 -
tcp 0 0 127.0.0.14:1521 localhost:33472 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:60632 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:52922 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:42406 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:60254 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:52904 CLOSE_WAIT -
tcp 0 0 localhost:42470 127.0.0.14:1521 ESTABLISHED 19/dotnet
tcp 0 0 127.0.0.14:1521 localhost:33422 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:49072 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:60244 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:52912 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:49100 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:42356 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:60822 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:42452 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:60728 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:60294 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:49132 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:52884 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:33560 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:60722 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:52952 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:33492 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:33538 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:60704 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:60144 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:49146 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:49026 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:42470 ESTABLISHED -
tcp 0 0 127.0.0.14:1521 localhost:42434 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:52932 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:60688 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:60226 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:60312 CLOSE_WAIT -
tcp 0 0 127.0.0.14:1521 localhost:33360 CLOSE_WAIT -
我应该如何解释 Oracle 端口出现在本地和远程列中,具有相同的环回 IP 的事实?
更新并回答最后一个问题:
混合连接管理器将 Oracle 端点公开为客户端上的本地环回地址。我了解 CLOSE_WAIT 表示另一端(HCM)已关闭连接,而本地应用程序(Oracle 池)尚未关闭连接但仍在继续连接。
现在我想知道这是否是 HCM 和 ODP.Net 之间的问题。如果某个东西从池下面关闭了一个活动连接,那么 Oracle 客户端和服务器可能都没有正确处理它?