0

SQL DB と Oracle DB の両方に多くの接続を行うアプリケーションがあります。Oracle 接続は、この例外を何度もスローします。私は検索を行い、このリンクを見つけました

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

以下で説明するように、Windows の .net の問題のようです。

「[ORA-12542 TNS アドレス使用エラー] は、Windows クライアントの空きポートが使い果たされ、エラー TNS を与える TIME_WAIT 状態のポートを使用しようとしていることが原因で発生します- 12542: アドレスは既に使用されています。"

私の質問は次のとおりです。

1> .NET で、接続を確立するためのローカル ポート範囲を指定することは可能ですか。たとえば、ある範囲のポートを SQL サーバー接続専用にし、別の範囲のポートを Oracle に指定します。

2> .Net の接続にはどのようにポートが割り当てられますか? そのため、Time_Wait ポートは再割り当てされません。

3> Oracle 接続の場合、50000 などの非常に大きな番号から始まるポート番号がローカル ポートに割り当てられますが、SQL Server 接続の場合、ローカル ポートは 5000 から始まります。なぜですか?

4> この問題を解決するにはどうすればよいですか?

前もって感謝します。

編集: SQLServer 接続でタイムアウト例外も発生します。それらは関連していると思います。

4

1 に答える 1

0

この問題は、接続プールがオフになっていて、エフェメラルポートが使い果たされている場合に発生する可能性があります。接続プーリングを使用すると、同じ要求スループットを満たすために必要な接続数が減り、問題が解決する場合があります。

ローカルポートの使用は、トラフィックの識別やファイアウォールルールの管理などを容易にするために、エフェメラルポートの場合でも、通常は特定の範囲に制限されます。

接続は比較的コストのかかる操作であるため、接続プールは通常、データベース接続に使用されます。このため、接続を再利用することをお勧めします。

これが接続を妨げている理由については、次のことを確認してください。

おそらく、MaxUserPortsがデフォルト以外の値に変更されていますか?デフォルトでは、3976個のポートが使用可能であり、同じリモートIPアドレス/ポートの組み合わせへの3976個の同時接続が可能です。(ポートは、リモートエンドが同じである場合にのみ一意であるremoteIP:port plus localIP:port必要があります。組み合わせは一意である必要があります)。

または、一部のコンポーネントは、OSに委任するのではなく、独自のローカルポート割り当てを管理するため、おそらくこれがの場合SqlConnectionです。

于 2013-02-15T13:06:44.433 に答える