0

我有一个与 SQL 和 Oracle 数据库建立许多连接的应用程序。Oracle 连接多次抛出此异常。我进行了搜索并找到了此链接

http://www.forumtopics.com/busobj/viewtopic.php?p=925784

它看起来像 Windows 中的 .net 问题,如下所述

“[使用中的 ORA-12542 TNS 地址错误] 是由于 Windows 客户端中的可用端口已用尽,并且它试图使用处于 TIME_WAIT 状态的端口,这会导致错误 TNS- 12542:地址已在使用中。”

我的问题是:

1> .NET 中是否可以指定用于建立连接的本地端口范围,例如,一个端口范围专用于 SQL 服务器连接,另一个端口范围用于 Oracle。

2> .Net 中如何将端口分配给连接?因此,不会重新分配 Time_Wait 端口。

3> 对于 oracle 连接,我的本地端口分配的端口号从非常高的数字开始,例如,50000,但是对于 SQL Server 连接,我的本地端口从 5000 开始。这是为什么?

4> 如何解决这个问题?

提前致谢。

编辑:我们还在 SQLServer 连接中遇到超时异常。我认为它们是相关的。

4

1 回答 1

0

如果您关闭了连接池,并且临时端口已用尽,则可能会出现此问题。使用连接池可以减少满足相同请求吞吐量所需的连接数,并且可以解决问题。

本地端口的使用通常被限制在特定范围内,即使对于临时端口也是如此,以便更容易识别流量和管理防火墙规则。

连接池通常用于数据库连接,因为连接是一项相对昂贵的操作。因此,最好重用连接。

至于为什么这会阻止你连接,你可能想看看这个:

也许 MaxUserPorts 已被修改为非默认值?默认情况下,应该有 3976 个可用端口,允许 3976 个同时连接到相同的远程 IP 地址/端口组合。(仅当远程端相同时,端口才必须是唯一的 - 组合remoteIP:port plus localIP:port必须是唯一的)。

或者,一些组件管理它们自己的本地端口分配,而不是委托给操作系统,所以SqlConnection.

于 2013-02-15T13:06:44.433 回答