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 :

Comment savoir qui locke un enrengistrement [FAQ]


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 11
    Par défaut Comment savoir qui locke un enrengistrement
    bonjour,

    j'aimerais récupérer le nom de l'utilisateur qui locke un enregistrement, je n'ai pas trouvé comment faire ! J'imagine que c'est un mix entre v$session et v$lock ?



    Vroom

  2. #2
    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
    Par défaut
    Bonjour Vroum ,

    je te conseille de t'attacher plus au SID qu'au user ( surtout si la base est Mono user applicatif ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     SELECT DECODE(request,0,'Holder: ','Waiter: ')||sid sess, 
             id1, id2, lmode, request, TYPE
        FROM V$LOCK
       WHERE (id1, id2, TYPE) IN
                 (SELECT id1, id2, TYPE FROM V$LOCK WHERE request>0)
       ORDER BY id1, request
    Bon courage

    Tiens cela pourrait être une idée de tuto , orafrance

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 11
    Par défaut
    Ca ne m'affiche pas les lock.

    Je crois qu'il va falloir que je me plonge dans la doc de V$LOCK (c'est vrai que ça ferait un bon tuto :-))


  4. #4
    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
    Par défaut
    Cette requête est censé vous afficher quelle session bloque quelle autre session. Je viens de re tester le code que je vous ai fournit il est bon de mon coté.

    Cette requête peut être couplé à la vue V$LOCKED_OBJECT
    qui vous permettra d'avoir les informations suivantes :

    . User Oracle
    . User Systéme
    . Process
    . Type de lock
    . Nom d'objet ( en couplant cette vue avec la vue dba_objects )

    Je vais essayer de faire une requête synthése


    Jaouad

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 119
    Par défaut
    Moi j'ai une petite requête qui m'aide pas mal quand j'ai des locks.
    Ca donne quoi ca chez toi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    SELECT   /*+ choose */
             bs.username "Blocking User",
             bs.username "DB User",
             ws.username "Waiting User",
             bs.sid "SID",
             ws.sid "WSID",
             bs.sql_address "address",
             bs.sql_hash_value "Sql hash",
             bs.program "Blocking App",
             ws.program "Waiting App",
             bs.machine "Blocking Machine",
             ws.machine "Waiting Machine",
             bs.osuser "Blocking OS User",
             ws.osuser "Waiting OS User",
             bs.serial# "Serial#",
             DECODE (
                wk.TYPE,
                'MR', 'Media Recovery',
                'RT', 'Redo Thread',
                'UN', 'USER Name',
                'TX', 'Transaction',
                'TM', 'DML',
                'UL', 'PL/SQL USER LOCK',
                'DX', 'Distributed Xaction',
                'CF', 'Control FILE',
                'IS', 'Instance State',
                'FS', 'FILE SET',
                'IR', 'Instance Recovery',
                'ST', 'Disk SPACE Transaction',
                'TS', 'Temp Segment',
                'IV', 'Library Cache Invalidation',
                'LS', 'LOG START OR Switch',
                'RW', 'ROW Wait',
                'SQ', 'Sequence Number',
                'TE', 'Extend TABLE',
                'TT', 'Temp TABLE',
                wk.TYPE
             ) lock_type,
             DECODE (
                hk.lmode,
                0, 'None',
                1, 'NULL',
                2, 'ROW-S (SS)',
                3, 'ROW-X (SX)',
                4, 'SHARE',
                5, 'S/ROW-X (SSX)',
                6, 'EXCLUSIVE',
                TO_CHAR (hk.lmode)
             ) mode_held,
             DECODE (
                wk.request,
                0, 'None',
                1, 'NULL',
                2, 'ROW-S (SS)',
                3, 'ROW-X (SX)',
                4, 'SHARE',
                5, 'S/ROW-X (SSX)',
                6, 'EXCLUSIVE',
                TO_CHAR (wk.request)
             ) mode_requested,
             TO_CHAR (hk.id1) lock_id1,
             TO_CHAR (hk.id2) lock_id2
    FROM     v$lock hk, v$session bs, v$lock wk, v$session ws
    WHERE    hk.block = 1
    AND      hk.lmode != 0
    AND      hk.lmode != 1
    AND      wk.request != 0
    AND      wk.TYPE(+) = hk.TYPE
    AND      wk.id1(+) = hk.id1
    AND      wk.id2(+) = hk.id2
    AND      hk.sid = bs.sid(+)
    AND      wk.sid = ws.sid(+)
    ORDER BY 1;

  6. #6
    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
    Par défaut
    Bon et bien je crois que la requête de lafouine est trés bonne

    Je l'ai modifié pour avoir le nom de l'objet concerné

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    SELECT   /*+ choose */ 
             bs.username "Blocking User", 
             bs.username "DB User", 
             ws.username "Waiting User", 
             bs.sid "SID", 
             ws.sid "WSID", 
             bs.sql_address "address", 
             bs.sql_hash_value "Sql hash", 
             bs.program "Blocking App", 
             ws.program "Waiting App", 
             bs.machine "Blocking Machine", 
             ws.machine "Waiting Machine", 
             bs.osuser "Blocking OS User", 
             ws.osuser "Waiting OS User", 
             bs.serial# "Serial#", 
             DECODE ( 
                wk.TYPE, 
                'MR', 'Media Recovery', 
                'RT', 'Redo Thread', 
                'UN', 'USER Name', 
                'TX', 'Transaction', 
                'TM', 'DML', 
                'UL', 'PL/SQL USER LOCK', 
                'DX', 'Distributed Xaction', 
                'CF', 'Control FILE', 
                'IS', 'Instance State', 
                'FS', 'FILE SET', 
                'IR', 'Instance Recovery', 
                'ST', 'Disk SPACE Transaction', 
                'TS', 'Temp Segment', 
                'IV', 'Library Cache Invalidation', 
                'LS', 'LOG START OR Switch', 
                'RW', 'ROW Wait', 
                'SQ', 'Sequence Number', 
                'TE', 'Extend TABLE', 
                'TT', 'Temp TABLE', 
                wk.TYPE 
             ) lock_type, 
             DECODE ( 
                hk.lmode, 
                0, 'None', 
                1, 'NULL', 
                2, 'ROW-S (SS)', 
                3, 'ROW-X (SX)', 
                4, 'SHARE', 
                5, 'S/ROW-X (SSX)', 
                6, 'EXCLUSIVE', 
                TO_CHAR (hk.lmode) 
             ) mode_held, 
             DECODE ( 
                wk.request, 
                0, 'None', 
                1, 'NULL', 
                2, 'ROW-S (SS)', 
                3, 'ROW-X (SX)', 
                4, 'SHARE', 
                5, 'S/ROW-X (SSX)', 
                6, 'EXCLUSIVE', 
                TO_CHAR (wk.request) 
             ) mode_requested, 
    		 object_name ,
             TO_CHAR (hk.id1) lock_id1, 
             TO_CHAR (hk.id2) lock_id2 
    FROM     v$lock hk, v$session bs, v$lock wk, v$session ws ,  V$LOCKED_OBJECT a , 
    dba_objects b
    WHERE    hk.BLOCK = 1 
    AND      hk.lmode != 0 
    AND      hk.lmode != 1 
    AND      wk.request != 0 
    AND      wk.TYPE(+) = hk.TYPE 
    AND      wk.id1(+) = hk.id1 
    AND      wk.id2(+) = hk.id2 
    AND      hk.sid = bs.sid(+) 
    AND      wk.sid = ws.sid(+) 
    AND      a.object_id=b.object_id 
    AND      hk.sid=a.session_id
    ORDER BY 1;
    Orafrance on peut l'ajouter au FAQ celle ci


    Jaouad

  7. #7
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Citation Envoyé par Jaouad
    Orafrance on peut l'ajouter au FAQ celle ci
    Il y a d'autres entrées à faire également, je tacherais de m'en occuper rapidement

  8. #8
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 119
    Par défaut
    Citation Envoyé par Jaouad
    Bon et bien je crois que la requête de lafouine est trés bonne


    Orafrance on peut l'ajouter au FAQ celle ci


    Jaouad
    WOW quel privilège ! Merci

    Sinon, vu que j'ai eu pas mal de problemes avec les locks a une epoque, j'ai une autre requete que j'aime bien, mais qui concerne les locks (et moins les lockers) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    break on Kill on username on terminal 
    column Kill heading 'Kill String' format a13 
    column res heading 'Resource Type' format 999 
    column id1 format 9999990 
    column id2 format 9999990 
    column lmode heading 'Lock Held' format a20 
    column request heading 'Lock Requested' format a20 
    column serial# format 99999 
    column username  format a10  heading "Username" 
    column terminal heading Term format a15 
    column tab format a35 heading "Table Name" 
    column owner format a9 
    column Address format a18 
     
    select  nvl(S.USERNAME,'Internal') username, 
            nvl(S.TERMINAL,'None') terminal, 
            L.SID||','||S.SERIAL# Kill, 
            U1.NAME||'.'||substr(T1.NAME,1,20) tab, 
            decode(L.LMODE,1,'No Lock', 
                    2,'Row Share', 
                    3,'Row Exclusive', 
                    4,'Share', 
                    5,'Share Row Exclusive', 
                    6,'Exclusive',null) lmode, 
            decode(L.REQUEST,1,'No Lock', 
                    2,'Row Share', 
                    3,'Row Exclusive', 
                    4,'Share', 
                    5,'Share Row Exclusive', 
                    6,'Exclusive',null) request 
    from    V$LOCK L,  
            V$SESSION S, 
            SYS.USER$ U1, 
            SYS.OBJ$ T1 
    where   L.SID = S.SID  
    and     T1.OBJ# = decode(L.ID2,0,L.ID1,L.ID2)  
    and     U1.USER# = T1.OWNER# 
    and     S.TYPE != 'BACKGROUND' 
    order by 1,2,5;

  9. #9
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    il y a celle_ci aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    set echo off
    set lines 150
    col "Waiters(SID|SPID|NOM_APP|ETAT)" for A40
    col "Holder(SID|SPID|NOM_APP|ETAT)" for A40
     
    select w.session_id||'|'||c.spid||'|'||b.module||'|'||b.status "Waiters(SID|SPID|NOM_APP|ETAT)", 
    h.session_id||'|'||e.spid||'|'||d.module||'|'||d.status "Holder(SID|SPID|NOM_APP|ETAT)"
    from dba_locks w, dba_locks h, v$session b, v$process c,v$session d,v$process e
    where (((h.mode_held != 'None') and (h.mode_held != 'Null')
         and ((h.mode_requested = 'None') or (h.mode_requested = 'Null')))
       and (((w.mode_held = 'None') or (w.mode_held = 'Null'))
         and ((w.mode_requested != 'None') and (w.mode_requested != 'Null'))))
      and  w.lock_type       =  h.lock_type
      and  w.lock_id1        =  h.lock_id1
      and  w.lock_id2        =  h.lock_id2
      and  w.session_id     !=  h.session_id
      and  w.session_id      =  b.sid
      and  h.session_id      =  d.sid
      and  b.paddr           =  c.addr 
      and  d.paddr           =  e.addr;
    Permis de savoir quelles sessions sont bloquées et par qui

  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
    Par défaut
    Merci à tous le monde de faire profiter de ces ressources

    Bel état d'esprit

    La requête de Lafouine est compléte et je pense que nous allons garder celle ci ( si tout le monde est d'accord )


    Merci bcp

    Jaouad

  11. #11
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 11
    Par défaut
    hou la, je m'absente 5 minutes et c'est l'avalanche de réponses 8)

    je regarde tout ça et vous dis si c'est ce que je cherchais.


Discussions similaires

  1. [Memoire] Comment savoir qui utilise la mémoire?
    Par zoltix dans le forum Windows Serveur
    Réponses: 6
    Dernier message: 31/12/2007, 17h55
  2. Réponses: 2
    Dernier message: 08/08/2006, 16h31
  3. Comment savoir à qui appartient le rang d'IP ?
    Par MaTHieU_ dans le forum Développement
    Réponses: 4
    Dernier message: 29/07/2006, 23h07
  4. comment savoir qui est connecté sur les db
    Par zoltix dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/05/2006, 16h35
  5. [PopupMenu] comment savoir qui le lance?
    Par eponette dans le forum Composants VCL
    Réponses: 11
    Dernier message: 30/08/2005, 20h22

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