Per individuare le sessioni che hanno un lock su di una determinata tabella utilizzo questa query:
SELECT b.Object_Name "Object Name",
ORACLE_USERNAME,
b.Object_Type "Type",
a.session_id "Session",
c.serial# "Serial",
DECODE(a.locked_mode,
0,'None',
1,'Null',
2,'Row-S',
3,'Row-X',
4,'Share',
5,'S/Row-X',
6,'Exclusive',a.Locked_Mode) "Locked Mode"
FROM v$locked_object a,
sys.all_objects b,
v$session c
WHERE a.object_id = b.object_id
AND c.sid=a.session_id
AND b.object_name= 'NOME TABELLA'
ORDER BY 1 DESC;
Chiaramente al posto di NOME TABELLA va inserita la tabella (senza lo schema) corretta che è in lock.
La query può essere utile quando non riusciamo ad aggiornare o eliminare le righe di una tabella e non siamo in grado di capire che ci sta bloccando.
Una volta individuata si può valutare se è il caso di effettuare un kill della sessione o attendere la sua fine.