我试图重新编译PL / SQL包,但无济于事。因为某些东西获得了锁定并且长时间未被释放。一旦我杀死所有会话,我就能够重新编译但遇到相同的行为(即锁定包),我想知道哪些工具可以识别什么可以获得它并且永远不会释放它?这发生在(Oracle 10.2.0.4)上。非常感谢您的帮助。
答案 0 :(得分:9)
我认为你的意思是10.2.0.4,因为没有10.0.x.x版本系列。
select * from v$locked_object lo join dba_objects o on lo.object_id = o.object_id
where o.object_name = 'xxPACKAGE NAMExx' and o.object_type = 'PACKAGE';
答案 1 :(得分:1)
select l.session_id, l.owner, l.name, l.type, inst_id, sql_id
, a.sql_fulltext
, 'alter system disconnect session '''||s.sid||','||s.serial#||',@'||inst_id||''' immediate' ddl
from dba_ddl_locks l
join gv$session s on s.sid = l.session_id
join gv$sqlarea a using(inst_id, sql_id)
where l.name = 'OBJECT_NAME'
;