ODP.NET 到本地数据库的连接池和 Azure 混合连接

ODP.NET Connection pooling and Azure Hybrid Connection to on-prem database

我正在使用 Azure 混合连接从 Azure Linux 上 Docker 中的 Dotnet 5 API 运行 连接到本地 Oracle 12 服务器.我们所有的数据库都查询 运行 个 return 游标的存储过程。服务器 运行 大约每周一次断开连接。

我对 Oracle 服务器的可见性有限(即没有),并且在服务器上没有管理员权限。我可以请管理员为我 运行 诊断查询。 目前有多个应用程序实例连接到同一个 Oracle 实例。

据我所知,应用程序关闭并有序地处理连接。我没有覆盖连接字符串中的任何默认连接池设置。我使用 Nuget (3.21.1) 的最新 Oracle.ManagedDataAccess.Core 包。

我想知道当池清除未使用的连接时,混合连接(它在后台使用服务总线!)是否无法正确地与服务器通信,并且服务器无限期地保留这些连接。如果您通过 Azure Hyrbid 连接大规模使用 Oracle,我很想知道它在较长时间内是否稳定,以及连接池是否正常工作。

更新:仍然没有解决方案,我发现 a prior report 发生了这种情况,而且我对 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 客户端和服务器都没有正确处理它?

在与 Oracle 和 Microsoft 的支持组织多次反复(以及不可避免的相互指责)之后,确定 Azure 的 HCM 不支持这种情况,无法使用。我们的客户被迫创建云应用程序用于连接到本地数据库服务器的 VPN。