IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

[8i] Tuer un process


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 78
    Points : 24
    Points
    24
    Par défaut [8i] Tuer un process
    Bonjour,

    j'ai un petit renseignement à vous demandé.
    On a une appli qui se connecte à une base oracle, or nous rencontrons un problème lorsque l'appli est déconnectée brusquemen (problème réseau, cable débranché). Lorsque ce type de deconnexion survient, la base oracle voit encore la machine où l'appli est lancée comme connectée, ce qui implique une alocation de ressource inutile puisque la machine à perdu la connexion.

    De plus, lorsque l'on relance l'appli après résolution du problème de connexoin, Oracle voit deux utilisateur de connécté : le précédent (qui est inutilisable) et le nouveau.

    J'aimerais savoir si il existe des paramètres afin de déconnecté proprement un user dans ce cas ?

    merci.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 78
    Points : 24
    Points
    24
    Par défaut
    bonjour,

    j'ai p'être manqué de clareté hier.
    Je cherche juste à savoir si il est possible de délogguer un utilisateur non pas selon son login user mais selon son nom de machine, ce qui me permettrait de ne pas avior de ressources utilisées inutilement.

    Merci

  3. #3
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Bonjour ,
    Pour killer un "user" selon sa machine ,c'est ce que j'ai cmpris ,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alter system kill session 'SUD,SERIAL#' ;
    et pour retrouver ces infos :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT sid , serial# FROM v$session 
    WHERE terminal='&machine'

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 78
    Points : 24
    Points
    24
    Par défaut
    merci.

    Il est vrai que cela me permet de m'en sortir.

    Par contre, j'ai une petite question. Cette méthode me permet de pouvoir killer une session oracle sur mon appli. Mais sur le principe, lorsqu'une session subit une perte de connexion, Oracle ne devrait il pas détruite automatiquement cette session ?

    J'aimerais savoir si il existe un paramétre dans le init.ora à modifier pour permettre de voir que lors d'une perte de connexion, il y ait une suppression de la session.

    merci

  5. #5
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Oracle doit effectivement pouvoir killer cette session
    sinon il existe un paramétre , qui concerne les dead connection , dans le sqlnet.ora :
    sqlnet.expire_time = 5

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 78
    Points : 24
    Points
    24
    Par défaut
    y'a t'il un moyen de savoir à combien est mis cette valeur de sqlnet.expire_time sur une base ?

  7. #7
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    il faut consulter le fichier sqlnet.ora sur le serveur ou est installé le SGBDR dans le répertoire :
    $ORACLE_HOME/network/admin/
    Cependant cette valeur n'a pas de défault et donc peut ne pas être positionné

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 78
    Points : 24
    Points
    24
    Par défaut
    merci.

    Par contre, après avoir ajouter ce paramètre à mon sqlnet.ora, mes session restent tout de même présentent pendant 15- 20 min, et ce malgré le fait d'avoir mis le sqlnet.expire_time = 10.

    Est ce normal qu'il ne tue pas mes process immédiatement ?

    PS : j'ai modifié le titre de mon post pour être plus clair

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 78
    Points : 24
    Points
    24
    Par défaut
    Ah, j'oublais. Outre regarder le sqlnet.ora, il y a t'il un moyen de voir si oracle a pris en compte ce paramètre ?

  10. #10
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    attention ici il ne s'agit pas d'un temps max de connexion ou d'inactivité , mais bel et bien des process qui se sont deconnecté de maniére non propre et qui continue a être vue dans v$session donc à savoir les DCD ( dead connection )


    DCD is initiated on the server when a connection is established. At this time SQL*Net reads the SQL*Net parameter files and sets a timer to generate an alarm. The timer interval is set by providing a non-zero value in minutes for the SQLNET.EXPIRE_TIME parameter in the sqlnet.ora file. When the timer expires, SQL*Net on the server sends a "probe" packet to the client. (In the case of a database link, the destination of the link constitutes the server side of the connection.) The probe is essentially an empty SQL*Net packet and does not represent any form of SQL*Net level data, but it creates data traffic on the underlying protocol. If the client end of the connection is still active, the probe is discarded, and the timer mechanism is reset. If the client has terminated abnormally, the server will receive an error from the send call issued for the probe, and SQL*Net on the server will signal the operating system to release the connection's resources.
    Le paramétre est bien dans le sqlnet.ora du serveur ?

  11. #11
    Futur Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    La commande 'alter system kill session ...' permet de marquer la session comme 'terminée'. Et le process 'oracle.exe' restera jusqu'à ce que l'application cliente fasse une nouvelle requête et s'entende répondre que la session a été killée.

    Par contre, la commande 'alter system disconnect session ... immediate' détruit directement le process 'oracle.exe'.

    ... je fais confiance à la doc Oracle, mais ça reste à tester.

  12. #12
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Peux donner la version exacte de ton server et me dire si tu es en MTS ou pas
    .

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 78
    Points : 24
    Points
    24
    Par défaut
    Il est bien dans le $HOME oracle/network/admin.

    J'ai bien sais que seules les connexions non-propres étaient touchées par ce paramètres.

    J'ai modifier le sqlnet.ora, et arrêter/relancer la base. Ensute, j'ai lancé TOAD, je me suis connecté à un schéma de la base. J'ai simulé un arret brutal en retirant le cable réseau.

    Ensuite, je remet le cable, je relance TOAD, me connecte sous un schéma à nouveau, et dans Kill/Trace session, je vois ma nouvelle connexion et l'ancienne, et ce pendant 15 minutes au moins.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 78
    Points : 24
    Points
    24
    Par défaut
    version ora_8.1.7

    MTS ?? Je ne sais pas de quoi tu parles (je ne suis encore que padawan).

  15. #15
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par ni0urk
    Ah, j'oublais. Outre regarder le sqlnet.ora, il y a t'il un moyen de voir si oracle a pris en compte ce paramètre ?
    Si tu veux tester si le DCD focntionne , alors dans ce cas tu peux paramétrer une trace dans le fichier sqlnet.ora présent dans $ORACLE_HOME/network/admin :

    TRACE_LEVEL_SERVER=16
    TRACE_DIRECTORY_SERVER=répertoire
    Une trace est génèrée dans le répertoire

    Tu te connecte , tu récupère le spid
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT sid , spid FROM v$session a, v$process b
    WHERE a.paddr=b.addr 
    AND a.sid= 15
    je prend l'exemple d'un OS UNIX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $ ps -eaf | grep 27789
    Puis faire un kill -9 sur le process
    et verifier si la trace a bien lieu

  16. #16
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par ni0urk
    version ora_8.1.7

    MTS ?? Je ne sais pas de quoi tu parles (je ne suis encore que padawan).
    cela ne concerne pas alors , puique le bug est fixé en 8163 .
    Le MTS est le multi trhead server , partage entre tout les users d'un pool de connexion .
    Pour savoir si le MTS est activé pour une session :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT * FROM v$session 
    WHERE server != 'DEDICATED'

  17. #17
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    ton serveur est sous linux ou windows?
    S'il est sous linux, tu peux tuer directement le process sous linux.
    Je l'ai déja fait plusieurs fois en dernier recours.
    Cela marche très bien.
    Pour celan utilise la colonne spid de la vue v$process

  18. #18
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Cela marche également sous windwos avec la commande ORAKILL

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 78
    Points : 24
    Points
    24
    Par défaut
    d'un :

    SELECT * FROM v$session WHERE server != 'DEDICATED'
    0 rows selected
    de deux : serveur sous aix

    Je ne veux pas killer à la main, c'est bien le problème, et normalement la paramètre sqlnet.expire_time doit tuer automatiquement les process fantomes.

    Je n'ai pas encore eu le temps d'essayerla trace Jaouad.

    Je vous remercie de m'aider, c'est bien gentil de votre part.

  20. #20
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Donc tu es bien en mode dedicated ( mode dédié pour toutes tes connexions )

    Une derniére question NIOURK , qu'elle est l'état de ces connexions fantômes , est ce qu'elle ne serait pas en : marked for kill :

Discussions similaires

  1. TOAD: Tuer un process
    Par claralavraie dans le forum Toad
    Réponses: 5
    Dernier message: 28/06/2007, 09h34
  2. tuer un process Système
    Par laurent_menard dans le forum Delphi
    Réponses: 2
    Dernier message: 25/07/2006, 08h59
  3. tuer un process
    Par alaparra dans le forum Windows
    Réponses: 3
    Dernier message: 31/05/2005, 21h20
  4. [BATCH] Comment tuer un process ?
    Par tonf dans le forum Windows
    Réponses: 8
    Dernier message: 08/03/2005, 16h48
  5. [Kill]tuer un process
    Par parisjohn dans le forum C
    Réponses: 9
    Dernier message: 27/08/2004, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo