5

C# と Oracle Data Provider for .NET (ODP) を使用して、データベースに対して長いクエリを作成し、TOAD を使用してサーバー側で接続を終了しました。その後、データベースへの後続のコールで、新しい OracleConnection オブジェクトを作成しても、次のエラーがスローされます。

ORA-01012: not logged on
Process ID: xxx
Session ID: yyy Serial number: zzz

ここで、プロセス ID とセッション ID は、接続を終了するために使用した識別子です。

サーバー側でOracleデータベースへの接続を終了すると、切断された接続が接続プールに返されるようです。また、C# クライアント コード (ODP を使用) が新しい接続を開くと、接続プールに返された切断された接続が取得される場合があります。

この動作を修正する方法についてのアイデアはありますか?

ところで、私はOracleクライアント10を使用しています

4

1 に答える 1

6

接続文字列の「接続の検証」プロパティをtrueに設定することで問題を解決しました。

ここでもっと読むことができます

警告として、Oracle のドキュメントを引用します。

Validate Connection 属性は、プールからの接続を検証します。この属性は、アプリケーションに提供される直前にデータベースへのサーバー ラウンドトリップで各接続を検証するため、絶対に必要な場合にのみ使用してください。無効な接続が一般的でない場合、開発者は Validate Connection を使用するのではなく、独自のイベント ハンドラーを作成して新しい接続を取得できます。これにより、通常はパフォーマンスが向上します。

于 2012-06-14T17:33:11.587 に答える