2011-07-18 48 views
3

これは具体的にはSQL Server Reporting Servicesですが、これも典型的な.Netアプリケーションの問題として認識しています。.NetへのOracle接続 - 接続プール

ここに問題があります。 SSRSを使用してOracleデータベースからデータを報告しています。 1日目から、ORA-2396:最大アイドル時間を超過、ORA-01012-ログオンしていないなどのエラーが表示されます。

DBA、アプリケーション開発者、ネットワークエンジニアが含まれていますが、それより良い手がかりを見つけることはできません。

最近、いくつかの調査を行っていますが、多くの人がoracleへの.Net接続性に関する1つの「既知の」問題を文書化していることがわかりました。彼らが言及しているように、接続プーリングを使用している場合は、プール内で有用でない接続が使用可能になる可能性があります。次回の要求では、この接続が使用され、その時点でエラーがスローされます。私たちのDBAが確認したように、Oracleインスタンスは、X分間アイドル状態の場合、接続を強制終了するように設定されています。ここで

は、より多くのカップルが同様に存在する上記の言及に http://msdn.microsoft.com/en-us/library/8xx3tyca(v=VS.90).aspx

http://www.codeproject.com/KB/dotnet/ADONET_ConnectionPooling.aspx

を持っているリンクです。しかし、私はそれが現在の問題(.Netとオラクルの最新バージョン)の問題であるということをどこでも明示している声明は得られません。

解決策の部分では、接続文字列の一部として「Validate Connection = true」属性を使用することに言及しています。しかし、私はそれを使用しようとすると、 "キーワードがサポートされていない - 接続を検証する"と言います。 (私もValidconを試しました)

私はこれらの質問があります 1.接続プールの問題からこの "汚い"読み取りが存在することが確認されていますか? 2.そうなら、解決策は何ですか? 3.そうでない場合は、私たちの側で問題を引き起こしている可能性があります。

詳細が必要な場合は、お気軽にコメントしてください。

+0

有効なSQL Server接続文字列はここにある:あなたはすでにそれを持っていなかった場合はここで

は、Oracleのデータプロバイダの接続文字列パラメータへの参照ですhttp://msdn.microsoft.com/en- us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx。接続プーリングをオフにすることができます。これを行うには、最大プールサイズ= 1を設定します。 –

+0

プールのサイズを制限するかプールを無効にするかに関するオプションは、組織のポリシーに従って許可されていません。 –

答えて

0

これは既知の問題で、接続プーリングを使用していて、いくつかのことに依存します.1つはサーバー上の設定...場合によってはOracle RACを使用するときに複雑になります。 Oracle。 NETプロバイダが組み込まれていシームレスにこの問題の世話をプールするためのソリューション...そのようなプロバイダがDevartから販売されているものです... http://www.devart.com/dotconnect/oracle/

私はちょうど幸せな顧客Devart、と提携していないのです...

1

ここでの根本的な問題は、DBAにあります。 DBAが実行しているのと同じアイドル状態の接続クリーンナップを実行できるアカウント(つまり、私の個人的なoracleアカウント)を使用すると、同じエラーが表示されます。最良の修正は、アイドル時間の後に終了しない「サービス」アカウントを割り当てるようにすることです。

これは、Oracleプロバイダーではなくマイクロソフトのプロバイダーを使用しているため、「キーワードはサポートされていません - 接続を検証します」と表示されていると思います。私はSSRS接続に精通していないので、どのように選択するかわかりません。ただし、System.Data.OracleClientとOracle.DataAccessの違いは.netです。

解決された場合、接続の検証オプションは、接続を使用する前に事前にpingを実行することでオーバーヘッドを追加し、単純にプールを無効にするよりもわずかに優れています。あなたが試すことができるもう一つは、プールが無駄になることを可能にするmin pool size = 0を設定することです。接続があまりにも長くアイドル状態になる可能性は低くなります。残念ながら、プロバイダが使用された後に失効した接続のみをチェックするので、完璧な修正ではありません。 http://download.oracle.com/docs/html/E10927_01/featConnecting.htm#i1006393

+0

お返事ありがとうございます。ええ、私は接続文字列属性がrecogzinedされていない理由を理解しました。私はDBAが設定を変更するという点についても見ています。しかし、私が持っていたコアな質問は、接続プールの振る舞いがそのようなものであることが確認されたことだけです。プール内に実際には使用できない接続が存在する可能性があり、実際に使用される前にそれらをきれいにする方法はありませんか? –

+0

SSRSのコンテキストでは、プログラムでできることがありますが、私は、プーリングを無効にする以外のことはできません(接続の作成を考えると、長いクエリ時間と大きなデータセットが標準です)。 接続が返された後に接続の有効期限がチェックされるため、問題解決の解決策は存在しません。問題を軽減する変更のみが存在します。 –

+0

ここに、MSプロバイダを使用したい場合、接続文字列オプションと思われるものへのリンクhttp://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracleconnection.connectionstring(VS) 80).aspx –