Bonjour,
nous rencontrons fréquemment des problèmes de lock sur des lignes de table sans pouvoir trouver qui détient le lock.
A force de chercher, je me suis aperçu qu'en lançant depuis une session un
select for update sur la ligne bloquée et qu'en parallèle j'exécute le script suivant :
Je récupère mon SID de session et un SID d'une autre session qui est logiquement la session bloquante. J'ai tenté un alter system kill sur cette session mais le lock est toujours là.
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 select oracle_username || ' (' || s.osuser || ')' username , s.sid || ',' || s.serial# sess_id , owner || '.' || object_name object , object_type , decode( l.block , 0, 'Not Blocking' , 1, 'Blocking' , 2, 'Global') status , decode(v.locked_mode , 0, 'None' , 1, 'Null' , 2, 'Row-S (SS)' , 3, 'Row-X (SX)' , 4, 'Share' , 5, 'S/Row-X (SSX)' , 6, 'Exclusive', TO_CHAR(lmode)) mode_held from v$locked_object v , dba_objects d , v$lock l , v$session s where v.object_id = d.object_id and v.object_id = l.id1 and v.session_id = s.sid order by oracle_username , session_id
Si je recherche dans v$process, je n'ai aucune ligne correspondant à son SID, Serial#
Quelqu'un aurait-il une solution ou ne reste-t'-il que le redémarrage de base dans ce cas là?
Partager