2

ODP.net を使用して、OracleDatabase のいくつかのテーブルに約 10000 のエントリを挿入および更新するアプリケーションがあります。ジョブを 100 エントリのブロックに分けました。

最初、アプリケーションはエントリごとに oracleconnection を開いたり閉じたりしていました。アプリケーションはエントリのいくつかのブロックで正常に実行されていましたが、しばらくすると (常に同じであるとは限りません)、実行が停止し、メモリはまだ使用されていましたが、CPU は使用されず、エラーもスローされませんでした。アプリケーションが OracleConnection Close メソッドを呼び出していたときであることがわかりました。

アプリケーションの最初と最後に開いて閉じて接続するように変更しましたが、すべて問題ありません。

エントリごとに接続を開いたり閉じたりするのは適切な方法ではありませんでしたが、私の質問は、なぜ OracleConnection のメソッド Close() で停止していたのですか?

誰にもアイデアがありますか?

前もって感謝します。

4

1 に答える 1

0

私は2つの理由を提案することができますが、どちらも以前に見たことがあります。

まず、多くのレコードに影響を与える長時間の接続がある場合、時間(または何かが挿入/更新をブロックしている可能性があります)が原因で、接続プールマネージャーが接続を再利用およびリサイクルしようとしている可能性があります。

デバッグが非常に難しいもう1つの問題は、接続がファイアウォールを通過し、ファイアウォールが長時間実行されている接続をドロップしている可能性です。この場合、プールから新しい接続を開くときに問題が発生する可能性があります-使用できるはずですが、開こうとすると失敗します(数年前のことなので、正確な症状とエラーメッセージを忘れています) 。

于 2012-08-20T14:53:06.327 に答える