Elencare le risorse bloccate in Oracle

Scopriamo chi tiene lockata una precisa tabella in Oracle, e da quale macchina la sta lockando.

Quando si esegue un’operazione su una risorsa, come una insert nelle tabelle, questa risorsa (in questo caso la tabella) entra in uno stato di lock che serve per evitare che altri possano modificarla, fino a quando la nostra operazione non è terminata ed eseguiamo un commit finale.

Se una tabella è in locked, vuol dire che chi non la sta modificando non può neppure eseguire una query di lettura su di essa (che sia un utente o un processo automatico), che risulterà in esecuzione fino a che il lock della tabella non viene disabilitato, ad operazione finita. Se, quindi, eseguendo una query su una tabella, vediamo che la query non risponde, molto probabilmente significa che qualcuno ci sta scrivendo dentro, e per sapere chi è possiamo eseguire questa query.

select c.owner, c.object_name, c.object_type, b.sid,
	b.serial#, b.status, b.osuser, b.machine
  from v$locked_object a, v$session b, dba_objects c
 where b.sid = a.session_id and a.object_id = c.object_id

La query ci comunica esattamente quale tabella (e in che owner/schema si trova) è occupata, da quale utente è occupata, e in quale macchina l’utente è loggato per eseguire l’operazione che la sta bloccando.