这样的:
1、sql>select * from v$access where object='YOUR_PROCEDURE_NAME';
  记录结果中的sid
2、sql>select paddr from v$session where sid in (如上的sid);
   或
   sql>select sid,serial# from v$session where sid in (如上的sid);
3、select spid from v$process where addr in (如上的paddr);
   然后kill -9 spid(在操作系统上做)
  或 
   sql>alter system kill session 'sid,serial#';
4、再执行一下1,如没记录返回了,证明没有锁的了,然后你再重编译一下就可以了。

解决方案 »

  1.   

    谢谢,我做到这一步:sql>alter system kill session 'sid,serial#';上一步查询出了有6个session, 删前两个session是正常的,但删除第三个时出现错误:ORA-00031:标记要删去的会话  请再指点一下,非常感谢!
      

  2.   

    你这是正常的,因为在一定时间内(好像是1分钟)杀不掉会话,就会给它打标记为killed.
    那你就用kill -9 这种方法吧,这是在unix 下用的
    如果你是windows 的,打开任务管理器杀掉那个进程。