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。
我正在使用 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。