Library cache pin解决方法
Oracle数据库中存储过程无法编译执行,编译存储过程时,发生“卡死”现象。
解决的思路是:首先找到哪个对象被锁;然后找到哪个session持有锁;最后终止该session。
1、找到一直处于等待状态的session
select * from v$session_wait where event like 'library%';
并记录下P1RAW字段(该会话等待的对象的handle的值)的值XXXXXXX。
2、找到持有锁的session
select a.sid, a.serial# from x$kglpn b, v$session a
where a.SADDR = b.kglpnuse and b.kglpnhdl = 'XXXXXXX' and b.kglpnmod <> 0;
并记录下SID以及SERIAL#字段的值,是该会话锁定了相关对象。
3、杀掉持有锁的session
alter system kill session 'sid, serial#';
如果不能杀则改杀操作系统进程:
select spid from v$session s, v$process p where s.paddr=p.addr and s.sid=XXXX;
# kill -9 spid
如果是windows操作系统,使用orakill:
orakill SID(instance_name) spid