2009-06-03 34 views
0

接続プーリングを使用してOracle9iリリース9.2.0.4データベースからデータベース接続を取得するアプリケーションがあります。アプリケーションはSJSAS 8.1でホストされ、ドライバはojdbc14.jarバージョン10.1.0.4です。JDBC getConnectionタイムアウトの問題

私が持っている問題はdatasource.getConnection()メソッドは、DBがダウンしているときに例外をスローするのに約40秒かかります!これは、DBの停止中にアプリケーションが過負荷になる原因となっています。私はデータソースでLoginTimeout=8を設定しようとしましたが効果はありません。

私は

<jdbc-connection-pool connection-validation-method="table" 
         datasource-classname="oracle.jdbc.pool.OracleDataSource" 
         fail-all-connections="true" 
         idle-time out-in-seconds="600" 
         is-connection-validation-required="true" 
         is-isolation-level-guaranteed="false" 
         max-pool-size="100" 
         max-wait-time-in-millis="8000" 
         name="mydb" 
         pool-resize-quantity="80" 
         res-type="javax.sql.DataSource" 
         steady-pool-size="20" 
         validation-table-name="dual"> 
    <property name="url" value="jdbc:oracle:thin:@server1:1521:mydb"/> 
    <property name="user" value="user1"/> 
    <property name="LoginTimeout" value="8"/> 
    <property name="password" value="pass1"/> 
</jdbc-connection-pool> 

を使用しているデータソースは、以下を参照してくださいいずれか助けてくださいことはできますか?与えられたタイムアウトでタイムアウトするには、getConnection()メソッドが必要です。

答えて

0

ここにしようとするいくつかのことです:

「Oracle Database JDBC開発者ガイドおよびリファレンス」からは。 JDBCを使用して

ファイアウォールのアイドル接続のための

ファイアウォールのタイムアウトは、接続を切断することがあります。これにより、接続を待つ間にJDBCアプリケーションがハングすることがあります。あなたが接続キャッシュ または接続プーリングを使用している場合は、必ず が 接続に無活動タイムアウト値を設定し、

  • :あなたが原因ファイアウォールのタイムアウトに切断されてからの接続を回避するために、次の1つ以上のアクションを実行することができますファイアウォールアイドルタイムアウト値よりも短いキャッシュ に設定します。
  • を と設定して接続を有効にする接続プロパティ ソケットのタイムアウト。タイムアウト値 の単位はミリ秒です。 JDBC OCIおよびJDBCシン両方 ドライバの場合
  • 、 にネット記述子を使用してデータベースに接続し、接続 記述子に DESCRIPTION句で= BROKENパラメータを有効 を指定します。また、tcp_keepalive_intervalには、より低い値 を設定します。
  • サーバー側の sqlnet.oraファイルに SQLNET.EXPIRE_TIME=1を設定して、Oracle Net DCDを有効にします。
+0

質問は「DBがダウンしている」ときです。そうすればあなたの答え全体が無関係になります。 – EJP

+0

これは関連しています。最初の3つの箇条書きは、DB側ではなくクライアント側で行うすべての作業です。それは、クライアント側のタイムアウトを早くすることです。 – mamboking