1

ODP.NET を使用して SQL Server から Oracle にデータを移動する夜間ジョブを作成しています。

約 100 個の接続オブジェクト (データとは無関係) を使用し、1 回の実行で (合計で) 1500 行を超える行が転送されるとは考えていません。私が読んだ ODP.NET のメモや資料では、接続プールをオフにしておくことについてはまったく触れていません。

開発では、接続プールをオフにしておくと、問題なく動作します。

特定のシナリオでは、接続プールをオフにしておくことをお勧めします (使用後にすべての接続が適切に破棄されている場合)。

  1. これは夜間のジョブであり、Oracle サーバーに大きな負荷がかかることはありません。

  2. 接続プールは古い接続を返す場合があり、そのためには設定の検証/例外処理を行う必要があります。

4

1 に答える 1

5

プーリングの唯一の理由はパフォーマンスです。したがって、夜間のジョブがそのウィンドウ内で実行される場合、実行していることに何の問題もありません。特に、切断された接続を心配する必要がないため、実装がシンプルに保たれるためです。

とはいえ、私はこの標準的な慣行を行いません。古い接続を処理するコードを書くことはめったになく、それでも単純なファクトリです。質問は、なぜ接続が古くなったのかということから始まります。通常、これはアイドル状態の接続を終了するファイアウォールまたは DBA ジョブのいずれかに関連しており、アプリケーション アカウントに対して両方を変更または緩和する必要があります。その場合でも、次のことができます。

  • 接続文字列で Min Pool Size=0 を指定します。そうすることで、ODP.net はアプリが最後に接続していたものもクリーンアップできるため、アプリが長時間アイドル状態になったときにアプリを完全に切断できます。
  • 接続文字列でより大きな Decr Pool Size を指定します。これにより、ODP.net によって 3 分ごとに閉じられるアイドル接続が増えます。
  • Validate Connection = true を設定してみることができます - 私の推測では、接続を開くよりも接続を検証するオーバーヘッドが少ないでしょう。

詳細については、http: //docs.oracle.com/cd/E15296_01/doc.111/e15167/featConnecting.htm#i1006228を参照してください。

于 2012-11-21T22:01:24.197 に答える