web-dev-qa-db-fra.com

Comment empêcher Oracle SQL Developer de fermer la connexion DB?

Existe-t-il un moyen d'empêcher Oracle SQL Developer de fermer mes connexions de base de données ou d'augmenter le délai d'expiration? Parfois, lors d'une requête de longue durée, SQL Dev fermera simplement la connexion, laissant ma requête en cours d'exécution sur le serveur mais moi sans résultat. Si je RDP dans le serveur et exécute SQL Dev localement, il ne semble jamais avoir ce problème.

34
Kevin Babcock

Cela ne ressemble pas à un problème avec le développeur SQL, mais je ne l'ai jamais rencontré. Êtes-vous sûr que ce n'est pas autre chose, comme votre réseau? Que se passe-t-il si vous vous connectez à partir de SQL plus à partir de votre bureau.

8
Matthew Watson

Je n'ai pas la réponse à cela, mais je rencontre le même problème.

Le pare-feu entre mon développeur SQL et la base de données ferme automatiquement les sessions "inactives". Une requête de longue durée est selon le pare-feu une session inactive, il la ferme donc. Je n'ai pas encore trouvé comment faire pour que SQL Developer envoie des paquets via une connexion avec une requête longue, afin que le pare-feu ne ferme pas la connexion. Et je ne sais pas si cela est possible du tout.

Je ne pense donc pas que ce soit un problème de développeur SQL, mais un problème de pare-feu.

-- MISE À JOUR

Il existe une extension pour SQL Developer qui vous permet de maintenir les connexions actives: http://sites.google.com/site/keepaliveext/

Ce n'est pas encore totalement terminé (par exemple, la notification que vous recevez indique le même délai d'expiration, quel que soit le délai que vous avez spécifié), mais cela fait l'affaire. Je ne l'ai pas encore testé par rapport à la dernière version préliminaire de SQL Developer, mais cela a fonctionné avec SQL Developer 2.2.x

-- MISE À JOUR

Pour SQL Developer 4+, vous pouvez utiliser: http://scristalli.github.io/SQL-Developer-4-keepalive/

28
DelGurth

Voici une autre extension Keep Connection Active qui pourrait être utile. (L'extension mentionnée ci-dessus contient un certain nombre de problèmes résolus dans cette extension.)

http://sites.google.com/site/keepconnext/

12
Dr.7

Cela me semble également être un problème de pare-feu.

Vous pouvez avoir de la chance en définissant le paramètre EXPIRE_TIME dans le fichier SQLNET.ORA du serveur. De la documentation:

Utilisez le paramètre SQLNET.EXPIRE_TIME pour spécifier un intervalle de temps, en minutes, pour envoyer une sonde pour vérifier que les connexions client/serveur sont actives. La définition d'une valeur supérieure à 0 garantit que les connexions ne sont pas laissées ouvertes indéfiniment, en raison d'une interruption anormale du client. Si la sonde trouve une connexion interrompue ou une connexion qui n'est plus utilisée, elle renvoie une erreur, provoquant la fermeture du processus serveur. Ce paramètre est principalement destiné au serveur de base de données, qui gère généralement plusieurs connexions à la fois.

10g de documentation sur EXPIRE_TIME

9
David Mann

À titre de solution temporaire, à côté de la "Grille de données", vous trouverez l'onglet "Sortie SGBD", activez la sortie SGBD et réglez la fréquence d'interrogation sur une heure agréable.

5
Vineet

notre DBA semble avoir trouvé une solution à cela:

2.2. S'il y a un pare-feu entre l'instance OC4J et la base de données Le pare-feu peut supprimer les connexions jdbc inactives au serveur de base de données. Cependant, l'instance OC4J ne peut pas détecter que le pare-feu a expiré la connexion à la base de données. Oracle Net peut être configuré avec la détection de connexion morte (SQLNET.EXPIRE_TIME) pour contourner ce problème. Définissez EXPIRE_TIME sur le serveur de base de données sur une valeur inférieure au délai de connexion du pare-feu afin que DCD maintienne la connexion à la base de données active. Voir la note 151972.1 "Explication de la détection de connexion morte (DCD)". Comme il s'agit d'un paramètre configuré sur le serveur de base de données, et non sur le milieu, il s'appliquera à toutes les connexions à la base de données (OCI et JDBC léger). Solutions alternatives: - Désactivez ou augmentez le paramètre de délai d'inactivité du pare-feu. ou - Configurez le paramètre TCP Keepalive time sur la base de données et sur les serveurs intermédiaires) à une valeur inférieure au délai de connexion du pare-feu. Après avoir défini le TCP Keepalive time, les machines enverront à plusieurs reprises un paquet nul après les minutes spécifiées pour maintenir les connexions actives. Comme le paquet est envoyé à chaque fois dans le délai d'inactivité du pare-feu, la connexion ne sera pas fermée.

3
Thomas