3

JDBC 接続が接続先の Oracle セッションを特定の状態 (つまり、DBMS_FLASHBACK 有効モード) にする状況があります。このモードの終了が (少なくとも理論的には) 失敗する可能性があります。これは、セッションが誤ってその状態のままになっていることを意味します。この場合、接続はプールに返され、DBMS_FLASHBACK が有効なモードのままの Oracle セッションを持つ別のスレッドによって取得されます。

私はそれが実際に起こることを証明しました。(JBoss 4.2.1)

理想的なのは、モードの終了が失敗したときに SQLException をキャッチし、接続を「不良」としてマークして、接続がプールに返されると、JBoss が接続を破棄して新しい接続を作成することです。

しかし、接続をすぐに破棄するようにマークする方法が見つかりません。誰も方法を知っていますか?

4

2 に答える 2

3

Oracle データベース接続構成には、例外ソーターが含まれている必要があります。

<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>

これは、接続を再利用できるか、または接続を切断する必要がある場合に、いつ例外が発生したかを判断しようとします。これはベスト エフォート ベースであり、すべての場合に機能するとは限りません。実動インストールに対する私の好みは、すべての例外を fatal としてマークすることです。これを行うには、例外ソーターを に設定するだけorg.jboss.resource.adapter.jdbc.GenericExceptionSorterです。

于 2009-05-29T06:22:15.610 に答える
1

良い質問です。完全な答えはわかりませんが、調査する方法としては、接続の有効性をテストする JBoss フェイルオーバー メカニズムから始めることです。そのためのドキュメントはhereです。次に、有効性をテストする SQL で、接続が DBMS_FLASHBACK 有効モードの場合に失敗する何かを入れることができれば、JBoss に接続を破棄させる必要があります。おそらく、接続がプールに返されたときではなく、次の接続要求でテストされますが、それは許容できるはずです。

于 2009-05-28T17:13:24.477 に答える