存储过程不能编译(Library cache pin)问题的解决



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

你可能感兴趣的:(Oracle,Troubleshooting)