odp.net 10.1.04 を使用して Oracle 10g に接続する asp.net 2.0。
私たちの Web アプリケーションには、1 日に 1 回、ODP-1000「接続要求がタイムアウトしました」という問題があります。
ご存じのように、これはメモリ リークの問題であり、開いている接続が閉じられずに破棄されないために発生します。
コードを再確認し、開いた後のすべての接続を閉じて破棄しました。OracleCommand、Oracledatareader などのすべての odp.net オブジェクトは、使用後に破棄されます。
web.config では、これが接続文字列です。
<add key="ConnectionString" value="user id=xxxx;data source=XXXX;password=xxxxx;Pooling=True;Connection Timeout=15;Incr Pool Size=5;Decr Pool Size=3;Max Pool Size=300;Min Pool Size=10;Validate Connection=true;"/>
接続タイムアウトを 60 に増やしました。
コードで閉じられていない接続を見つけることができないため、conn.Open で「接続要求がタイムアウトしました」というエラーが発生したときに非アクティブな Oracle セッションを閉じるか破棄する方法はありますか?
いくつかの情報によると: http://rainmanalex.wordpress.com/2008/11/13/odpnet-connection-string-attributes/
"レギュレーター スレッドは 3 分ごとに生成され、プールされた接続が使用されていない場合は Decr Pool Size の量まで閉じます。"
3 分待つ代わりに、「接続要求がタイムアウトしました」というエラーが発生したときに非アクティブな接続を強制的に閉じる方法はありますか?
何かのようなもの:
If conn.Open gets error "Connection request timed out"
Then
Destroy inactive Oracle session
Try again conn.Open
End If