0

現在、Windows サービスとして構成されている VB .Net アプリケーションの 1 つで、Oracle Data Connect dll を使用しています。使用している .Net バージョンは Framework 3.5 で、Oracle 10g に接続しています。

このアプリケーションは、常にデータベースへの接続を確立し、その特定のインスタンスですべての接続をすぐに閉じます (データベース接続には一種のシングルトン設計パターンが関係しています)。DB 接続に関するエラーがより頻繁に発生していました (「<strong>CONNECTION LOST CONTACT」)。いくつかのブログを読んだ後、接続文字列にパラメーターをVALIDATE CONNECTION=TRUEとして追加しました。このエラーは解決されましたが、現在、「<strong>接続要求がタイムアウトしました」</strong> という新しいエラー メッセージが表示されています。

4

1 に答える 1

1

Oracle Data Provider for .NET / ODP.NETを使用してタイムアウトを指定する唯一の接続文字列オプションは次のとおりです。

Data Source=myOracle;User Id=myUsername;Password=myPassword;Min Pool Size=10;Connection Lifetime=120;Connection Timeout=60;Incr Pool Size=5;Decr Pool Size=2;

ここでさらに例を得ることができます: http://www.connectionstrings.com/oracle#p12

説明は次のとおりです。

デフォルトでは、接続プーリングは有効になっています。これはプーリングメカニズムを制御します。接続プール サービスは、ConnectionString プロパティを使用してプールを一意に識別することにより、接続プールを作成します。

最初に開いた接続によって、接続プールが作成されます。サービスは、最初に Min Pool Size パラメータで定義された数の接続を作成します。

Incr Pool Size 属性は、さらに多くの接続が必要な場合に接続プール サービスによって作成される新しい接続の数を定義します。

接続が閉じられると、接続プーリング サービスは、接続の有効期間が Connection Lifetime 属性の値を超えたかどうかを判断します。その場合、接続は閉じられています。それ以外の場合、接続は接続プールに戻ります。

接続プーリング サービスは、未使用の接続を 3 分ごとに閉じます。Decr Pool Size 属性は、3 分ごとに閉じることができる接続の最大数を指定します。

さらに、クエリを実行している OracleCommand からタイムアウトが発生しているかどうかを確認できます。OracleCommand.CommandTimeout プロパティに関するドキュメントを探してください。

Oracle コマンドのタイムアウトに関するディスカッションについては、このサイトを参照して ください https://forums.oracle.com/forums/thread.jspa?threadID=317603

于 2012-05-02T13:04:58.930 に答える