Réglage de l'Oracle 11g Délai d'expiration de Session
Après le redémarrage du serveur, la connexion oracle et le serveur Tomcat fois chaque nuit. Avant le redémarrage de l'ordinateur, la connexion n'a pas de délai d'attente. Maintenant, le matin, l'application renvoie une connexion JDBC erreur lors de l'accès à la DB. Le redémarrage de Tomcat corrige le problème. Je suppose que c'est dû à des connexions en cours de rétablissement. Je pense que c'est dû à l'Oracle DB interrompre la session. Comment l'expiration de la session, être désactivé dans Oracle 11g?
Merci!
Steve
Config.groovy avec dev et test omis.
dataSource {
pooled = true
}
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = true
cache.provider_class = 'net.sf.ehcache.hibernate.EhCacheProvider'
}
// environment specific settings
environments {
production {
dataSource {
driverClassName = "oracle.jdbc.driver.OracleDriver"
username = "XXXXX"
password = "XXXXXX"
dialect = "org.hibernate.dialect.Oracle10gDialect"
dbCreate = "update" // one of 'create', 'create-drop','update'
url = "jdbc:oracle:thin:@XXXXXX:1521:xxxx"
}
} }
est-ce un graal de l'application en cours d'exécution sur tomcat?
oui - Graal 1.2.2, RHEL 5.5, Tomcat 6.0.26
oui - Graal 1.2.2, RHEL 5.5, Tomcat 6.0.26
OriginalL'auteur ptsw | 2010-07-29
Vous devez vous connecter pour publier un commentaire.
C'est généralement contrôlée par le profil associé à l'utilisateur Tomcat est connecté.
De sorte que l'utilisateur je suis connecté n'a pas de limite de temps d'inactivité - pas de temps.
OriginalL'auteur Adam Musch
Adam a déjà proposé la base de données de profils.
Vous pouvez cocher la case SQLNET.ORA fichier. Il y a un EXPIRE_TIME paramètre, mais c'est pour la détection de la perte des connexions, plutôt que terminer existants.
Donné, il se passe la nuit, il ressemble plus à un délai d'inactivité, ce qui peut-être un pare-feu entre le serveur d'application et le serveur de base de données. Réglage de la EXPIRE_TIME peut arrêter ce qui se passe (comme il y aura de vérifier toutes les 10 minutes pour vérifier que le client est en vie).
Ou, éventuellement, la base de données est en cours d'arrêt et de redémarrage et qui est en train de tuer les connexions.
Sinon, vous devriez être en mesure de configurer tomcat avec un validationQuery afin qu'il redémarre automatiquement la connexion sans redémarrer tomcat
Sons normaux. Sans expire_time, Oracle n'y a généralement pas d'avis si un client, la connexion est annulée à moins que c'est dans le milieu de quelque chose. Si le v$session d'entrées ne sont pas traîner, on dirait qu'ils sont intentionnellement fermer l'application cliente.
OriginalL'auteur Gary Myers
C'est probablement causée par votre application pool de connexion; n'est pas un SGBD Oracle problème. La plupart des pools de connexions avoir valider un énoncé qui peut s'exécuter avant de vous donner le lien. Dans oracle, vous voulez "Select 1 from dual".
La raison pour laquelle il est apparu après avoir redémarré le serveur, c'est que le pool de connexion a probablement été ajoutée sans redémarrage de l'ordinateur et vous êtes juste maintenant l'expérience de l'utilisation du pool de connexion pour la première fois. Quelle est la date de modification sur vos fichiers de ressources qui traitent de connexions de base de données?
Valider exemple de Requête:
EDIT:
Dans le cas du Graal, il existe des options de configuration pour le graal de la piscine. Exemple pour le Graal 1.2 (voir les notes de version pour Graal 1.2)
Est mis en commun défini à true ou à false sur votre graal de la base de données de configuration? La valeur par défaut est true, si vous n'avez pas le jeu de paramètres. Si commun est défini sur true, je serais prêt à parier que la piscine est le problème, pas Oracle.
OriginalL'auteur Brian
J'en suis venu à cette question, la recherche d'un moyen pour permettre à oracle de la session de la piscine expiration basé sur le total de la durée de session au lieu de temps d'inactivité.
Un autre objectif est d'éviter la force de ferme inattendu de l'application.
Il semble qu'il est possible par la mise en pool requête de validation à
Ce serait de fermer les sessions de vieillissement de plus de 30 minutes prévisibles de manière à ne pas affecter la demande.
OriginalL'auteur Vadzim
La DB savoir la connexion a diminué, ou est la session figure encore dans v$session? Qui indique, je pense, que c'est d'être lâché par le réseau. Savez-vous combien de temps il peut rester inactif avant de rencontrer le problème, et si cela ressemble à la TCP ralenti valeurs (nettes.ipv4.tcp_keepalive_time, tcp_keepalive_probes et tcp_keepalive_interval de sysctl si je me souviens bien)? Ne me souviens pas si sysctl changements persistent par défaut, mais cela pourrait être quelque chose qui a été modifié et ensuite réinitialiser par le redémarrage de l'ordinateur.
Aussi que vous pourriez être en mesure de réinitialiser votre connexions JDBC sans sauter le serveur tout entier; ne peut certainement dans WebLogic, je me rends compte n'aide pas beaucoup, mais je ne suis pas familier avec le Tomcat équivalents.
Oui, le redémarrer Tomcat n'affecte pas toute jeune orphelin sessions. Je suppose que Oracle pourrait être remarqué ils sont morts après un certain temps et y mettre fin, de manière totalement indépendante de votre client de clôture à sa fin (uniquement lorsque vous essayez d'envoyer des données à travers); nous avons un client JDBC application qui se comporte comme ça plusieurs heures après la distance DB a rebondi, mais je suis sûr qu'il ya beaucoup de variations. Vous auriez besoin de vérifier ce qui est dans v$session tout de suite après le délai d'attente, mais qui n'est pas connu et est parfois pour la nuit c'est un peu dur. Je suppose que le moniteur de v$session et voir quand ils se ferment? Bonne chance...
OriginalL'auteur Alex Poole
Contrôlez les applications paramètres du Pool de connexions, plutôt que de modifier une session timout paramètres sur l'oracle db. C'est normal qu'ils temps.
Ont un coup d'oeil ici:
http://grails.org/doc/1.0.x/guide/3.%20Configuration.html#3.3%20The%20DataSource
Êtes-vous sûr que vous avez défini le "commun" paramètre correctement?
Salutations,
Lars
EDIT:
Votre config semble ok sur le premier coup d'œil.
Je suis tombé sur cette question aujourd'hui. Peut-être que c'est lié à votre douleur:
"Boucle infinie des exceptions si l'application est démarrée lorsque la base de données est arrêté pour maintenance"
OriginalL'auteur Lars