En ce moment j'ai quelques nouvelles applications développées contre une base de données d'Oracle, et parfois elles se bloquent ou échouent pour finir correctement, etc ... de toute façon le problème est qu'elles semblent parfois laisser leurs connexions ouvertes, et je dois nettoyer après leur. Ma question est la suivante: y a-t-il un moyen d'identifier les connexions mortes et de les nettoyer?Comment puis-je nettoyer les connexions mortes en utilisant Oracle?
Répondre
Voici une page relative aux paramètres de délai de connexion que vous pouvez définir dans Oracle 11g. Je pense que le 'Abandon Connection Timeout' est ce que vous cherchez.
Vous pourriez également être intéressé par les tuer. L'exécution de ce script dans SQL * Plus vous donnera une liste d'instructions "kill". Vous pouvez choisir ceux que vous voulez tuer en fonction du Sid et les exécuter. Oracle a ses propres connexions internes, ne les tuez pas.
SELECT 'alter system kill session ''' || sid || ',' || serial# || '''; ' || sql_id death
FROM v$session
/
Je crois que vous êtes à la recherche du paramètre sqlnet.ora EXPIRE_TIME qui indique la base de données d'envoyer une sonde au client toutes les quelques minutes pour vérifier que la connexion est toujours en vie.
Voici comment identifier la session à tuer (vous aurez besoin de SID et SERIAL # pour le tuer). Devrais-je mentionner que vous devez vous assurer que vous tuez la bonne session? sys_context('userenv','sid')
obtient le SID de votre propre session.
SELECT s.inst_id,
s.sid,
s.serial#,
p.spid,
s.username,
s.osuser,
s.program
FROM gv$session s
JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
WHERE s.type != 'BACKGROUND';
Vous pouvez ensuite émettre alter system kill session '[sid],[serial#]'
comme suggéré par WW.
Cependant la commande alter system kill session
ne tue pas forcement la session, mais demande à la session de mourir. Si la session est vraiment bloquée, vous constaterez que la demande se bloque pendant 60 secondes et renvoie ORA-00031 Session marked for kill
. Et la session est toujours là.
Dans ce cas, vérifiez d'abord que la session ne roule pas en arrière une opération importante (référence croisée du SID et de série de ce qui précède):
SELECT s.username,
s.osuser,
s.sid,
s.serial#,
t.used_ublk,
t.used_urec,
rs.segment_name,
r.rssize,
r.status
FROM v$transaction t,
v$session s,
v$rollstat r,
dba_rollback_segs rs
WHERE s.saddr = t.ses_addr
AND t.xidusn = r.usn
AND rs.segment_id = t.xidusn
ORDER BY t.used_ublk DESC;
Si une transaction roule en arrière, vous verrez USED_UREC décroissant. Laissez-le pour terminer la restauration.
Sinon, ALTER SYSTEM DISCONNECT SESSION '[sid],[serial#]' IMMEDIATE;
déconnectera de force la session et annulera la transaction ouverte.
Toutes les informations ci-dessus proviennent de here.
- 1. en utilisant mysql_real_escape_string pour nettoyer mes requêtes
- 2. Comment nettoyer les URL Seaside?
- 3. Connexions Oracle à partir d'une application COM +
- 4. Comment améliorer les performances dans Oracle en utilisant SELECT DISTINCT
- 5. Comment nettoyer correctement les objets d'interopérabilité en C#
- 6. Comment nettoyer sys.conversation_endpoints
- 7. Nettoyer les motifs Invoke?
- 8. Comment obtenir l'année en cours en utilisant SQL sur Oracle?
- 9. Nettoyer les expressions régulières Python
- 10. Demander à Oracle en utilisant .NET MVC
- 11. Comment compter les connexions db ouvertes?
- 12. Outil pour nettoyer les CSS?
- 13. Les applications de bureau hors-cloud sont-elles mortes?
- 14. Manquer de connexions DB en utilisant LINQ to SQL
- 15. HTTP 1.1 Connexions persistantes utilisant des sockets en Java
- 16. Comment se connecter à Oracle en utilisant JRuby et JDBC
- 17. Comment Subsonic gère-t-il les connexions?
- 18. Comment nettoyer le magasin de symboles?
- 19. Suppression des connexions Oracle à l'aide d'une requête
- 20. comment fermer les outils hibernate connexions db
- 21. Nginx nettoyer les urls réécrire pour Mediawiki
- 22. Comment nettoyer après avoir utilisé le dojo?
- 23. Comment nettoyer au mieux les ressources pour l'application .NET?
- 24. Comment vérifier le nombre maximal de connexions autorisées à une base de données Oracle?
- 25. Combien de connexions Oracle Express Edition (XE) peut-elle gérer?
- 26. Comment contrôler les connexions ouvertes à certaines adresses IP pour un programme en cours d'exécution en utilisant C#
- 27. Oracle: Comment convertir un hex en décimal dans Oracle SQL?
- 28. puis-je nettoyer stacktrace?
- 29. Comment importer uniquement les données sans index et contraintes dans Oracle en utilisant la commande 'imp'
- 30. Comment puis-je faire en sorte que WCF ferme automatiquement les connexions?
Merci pour le script! –