Oracle : Tablas y objetos bloqueados

Para obtener una lista con los objetos bloqueados ejecucutados:

select substr(a.os_user_name,1,8) "OS User"
, substr(b.object_name,1,30) "Object Name"
, substr(b.object_type,1,8) "Type"
, substr(c.segment_name,1,10) "RBS"
, e.process "PROCESS"
, substr(d.used_urec,1,8) "# of Records"
, e.sid
, e.serial#
, p.*
from v$locked_object a
, dba_objects b
, dba_rollback_segs c
, v$transaction d
, v$session e
, v$process p
where a.object_id = b.object_id
and a.xidusn = c.segment_id
and a.xidusn = d.xidusn
and a.xidslot = d.xidslot
and d.addr = e.taddr
and p.addr = e.paddr


Si intentamos por ejemplo hacer un "drop table" obtendremos un error del tipo ORA-00054: recurso ocupado y obtenido con NOWAIT.

Para desbloquear uno de los objetos usamos alguna de las siguientes sentencias

ALTER SYSTEM DISCONNECT SESSION 'SID, SERIAL' IMMEDIATE;

o bien

ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
En el caso de que no finalice el proceso podemos matarlo desde el SO. Para ello utilizaremos lo siguiente desde un entorno linux:

kill -9 SPID
Donde el SPID lo podemos obtener en la consulta escrita anteriormente.

Comentarios

Unknown ha dicho que…
Gracia me salvaron la vida me funciona el de maravilla
Dante ha dicho que…
Me sirvio gracias!
leopato19 ha dicho que…
graciasssss
bernardo ha dicho que…
gracias me sirvio de lo lindo :)
Unknown ha dicho que…
Me salvo porque no se me pesentaba casi nunca este error pero por falla en el proveedor de internet me quedo una transaccion sin terminar;
Muchas gracias
Unknown ha dicho que…
muchas gracias.

Entradas populares de este blog

Oracle obtener fecha de creación de una tabla