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 :
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
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à.
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à?