Est-il possible de spécifier le délai de connexion/requête pour les requêtes de base de données Oracle? Que ce soit du côté Oracle ou dans le pilote JDBC d'Oracle (10.2.0.4)? Donc, ce client Java vient de recevoir une erreur après, disons, 2 minutes au lieu d'attendre qu'Oracle ait fini d'exécuter la requête?Connexion Oracle/délai d'expiration de la requête
Répondre
Si vous exécutez la requête dans le contexte d'une transaction, la valeur du délai d'attente de transaction du moniteur de transaction JTA déterminera le délai d'expiration de la requête. La configuration pour cela dépend d'un serveur d'application à l'autre.
À un niveau de requête individuel (en l'absence d'un moniteur de transaction JTA), la méthode setQueryTimeout peut être utilisée pour définir le délai d'attente d'exécution d'un objet Statement/PreparedStatement/CallableStatement.
Mise à jour
setQueryTimeout est de ne pas être invoqué, même si cela fonctionne (atleast d'un client J2SE). Il fonctionne via le pilote JDBC effectuant un aller-retour complet vers le serveur de base de données Oracle. Ensuite, il est jusqu'à la base de données pour arrêter l'exécution de la requête. Ne comptez pas dessus pour des applications critiques dans le temps.
Jetez un coup d'œil aux profils Oracle. Cela vous permet de spécifier plusieurs limites au niveau de la base de données. L'un d'eux est un temps CPU maximum par requête.
Si vous avez des requêtes qui s'exécutent régulièrement pendant plus de 2 minutes, vous pouvez d'abord effectuer un réglage de vos requêtes.
Les profils Oracle affectent toutes les requêtes pour l'utilisateur. Le PO pourrait être intéressé par une seule requête qui doit être annulée. –
Mais, cela fonctionnerait comme une solution de force brute ;-) –
Les profils Oracle seront notre prochaine étape si le setQueryTimeout ne fonctionne pas :). –
- 1. comment définir le délai d'expiration de la requête à partir de la chaîne de connexion SQL
- 2. Requête MySQL Connexion au serveur Syslog-ng
- 3. Problème de réutilisation de la connexion MySQL
- 4. avez-vous vu? _mysql_exceptions.OperationalError « La connexion au serveur MySQL lors de la requête » ignorée
- 5. Expiration de la connexion
- 6. Comment modifier la chaîne de connexion de NHibernate par requête HTTP?
- 7. Délai de connexion lors de la tentative d'ouverture d'une connexion
- 8. HttpWebRequest non retourné, fermeture de la connexion
- 9. Connexion de connexion MysqlCommand de manière inattendue
- 10. Durée de vie de la connexion SQL
- 11. java.net.ConnectException: la connexion a expiré: l'exception de connexion se produit
- 12. La connexion sous-jacente a été fermée: La connexion a été fermée de manière inattendue.
- 13. FormsAuthentication après la connexion
- 14. Calcul de la vitesse de connexion/téléchargement
- 15. Durée de vie de la connexion TCP
- 16. refusé la connexion
- 17. Erreur lors de la tentative de connexion AD en utilisant la connexion LDAP
- 18. Problèmes de connexion PostgreSQL
- 19. Paramètres de la session de pool de connexion
- 20. Réutilisation de la connexion avec Curl, Apache et mod_wsgi
- 21. Échec de la requête PHP
- 22. nécessaire de sélectionner la requête
- 23. alias résultat de la requête
- 24. différence entre la connexion partageable et non échangeable dans le pool de connexion jdbc?
- 25. requête de mappage ùser
- 26. ASP.NET - Réinitialisation de la connexion serveur
- 27. IIS/DirectoryEntry/ASP.NET - Échec de la connexion
- 28. Comment crypter la chaîne de connexion Sql?
- 29. Problèmes avec la page de connexion
- 30. Vérification de la connexion LDAP (Java)
Nous avons des problèmes avec le délai JTA car il n'affecte pas la requête en cours d'exécution. Et en fait, le serveur WebLogic sur lequel nous travaillons essaye de tuer la longue connexion et crée un autre thread pour le tuer, mais il bloque le verrou Java dans le pilote JDBC d'Oracle, provoquant ainsi l'attente des deux threads. Le problème est d'autant plus grave que WebLogic essaie de créer encore plus de threads meurtriers et finit par en manquer. –
Le point sur setQueryTimeout semble très intressant et je n'y ai pas pensé avant actuallly :). Nous ne nous soucions pas vraiment si setQueryTimeout prendrait du temps pour annuler la requête, la chose principale ici est le résultat :). Je reviendrai sur les résultats du test. –
La raison setQueryTimeout() peut ne pas fonctionner dans WLS, d'autant plus à cause de JTA. Je ne pense pas que le pilote répondra aux appels setQueryTimeout dans un contexte de transaction, mais je peux être incorrect. –