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
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
Bonjour Vroum ,
je te conseille de t'attacher plus au SID qu'au user ( surtout si la base est Mono user applicatif ) :
Bon courage
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
Tiens cela pourrait être une idée de tuto , orafrance
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 :-))
![]()
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
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;
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é
Orafrance
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;on peut l'ajouter au FAQ celle ci
![]()
Jaouad
Il y a d'autres entrées à faire également, je tacherais de m'en occuper rapidementEnvoyé par Jaouad
![]()
WOW quel privilège !Envoyé par Jaouad
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;
il y a celle_ci aussi :
Permis de savoir quelles sessions sont bloquées et par qui
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;![]()
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
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.
![]()
Partager