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.

Controlliamo ciclicamente il funzionamento dei link nei nostri articoli. Se noti dei link che non funzionano segnalacelo tra i commenti. Se hai apprezzato l'articolo considera l'idea di sostenere il blog anche con una piccola donazione. Grazie. Patreon / Ko-fi / Liberapay / Paypal

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *