2009-06-03 7 views
0

J'ai une application qui utilise le regroupement de connexions pour obtenir une connexion à une base de données à partir d'une base de données Oracle9i version 9.2.0.4. L'application est hébergée dans SJSAS 8.1 et le pilote est ojdbc14.jar version 10.1.0.4.Problème de délai d'attente JDBC getConnection

Le problème que j'ai est datasource.getConnection() méthode prend environ 40 secondes pour lancer une exception lorsque la DB est en panne! Cela provoque une surcharge de l'application pendant une panne de DB. J'ai essayé de définir LoginTimeout=8 avec la source de données mais cela n'a aucun effet.

S'il vous plaît voir ci-dessous la source de données que je utilise

<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> 

Quelqu'un peut-il s'il vous plaît aider? J'ai besoin de la méthode getConnection() pour expirer dans le délai imparti.

Répondre

0

est ici quelques choses à essayer:

De "Guide Oracle® Database JDBC et développeur de référence".

Utilisation de JDBC avec Firewalls

délai d'attente du pare-feu pour les connexions sans marche au ralenti peut rompre une connexion. Cela peut provoquer le blocage des applications JDBC en attendant une connexion. Vous pouvez effectuer une ou plusieurs des mesures suivantes pour éviter les connexions d'être coupé en raison de délai d'attente du pare-feu:

  • Si vous utilisez la mise en cache ou la mise en commun de connexion connexion, puis toujours définir la valeur du délai d'inactivité sur la connexion Le cache doit être plus court que la valeur du délai d'inactivité du pare-feu .
  • Passez oracle.net.READ_TIMEOUT comme propriété de connexion pour activer lire délai d'attente sur socket. La valeur du délai d'expiration est en millisecondes.
  • Pour les deux pilotes JDBC OCI et JDBC Thin , utilisez descripteur net pour se connecter à la base de données et spécifiez le paramètre enable = BROKEN dans la clause DESCRIPTION dans la connexion descripteur . En outre, définissez une valeur inférieure pour tcp_keepalive_interval.
  • Activer en mettant SQLNET.EXPIRE_TIME=1 dans le fichier sqlnet.ora sur le côté serveur Oracle Net DCD.
+0

La question concerne la 'panne de la base de données'. Cela rend toute votre réponse non pertinente. – EJP

+0

C'est pertinent. Les 3 premiers points sont tout ce que vous faites côté client et non DB. Il s'agit d'accélérer le délai d'attente du client. – mamboking