编译同一个存储过程,或者执行此存储过程时非常慢,最后报错:ORA-04021: 等待锁定对象 SBJC.PRO_JC_ENTRANCE 时发生超时。
网上查了一下。一般ORA-04021是因为这个包正在被其他会话调用,编译时申请不到library lock导致的,通过dba_ddl_lock 找到调用这个包的会话kill之后据能够正常编译,按照这个方法问题得到解决。
select * from dba_ddl_locks where name='PRO_JC_ENTRANCE'
150
select sid,serial# from v$session where sid=150;
150 7513
alter system kill session '150, 7513';
问题解决。