调试Oracle存储过程时发现刚才存储过程被锁了,只要一编译该存储过程或者修改过程都会出现停止响应,用以下的方法还是不得。1:找过程到相关存储过程的sidselect sid from v$access where object = '存储过程名'2.根据sid找到serial#select SERIAL# from V$session where sid=70 ---70是第一个SQL语句查出来的SID根据sid和serial#杀掉存储过程的锁alter system kill session '70,1'; 出现:“标志会话结束命令”这种方法也是无法杀掉存储过程的锁,请问还有别的比较好的方法解决过程被锁的吗???先谢谢了!

解决方案 »

  1.   

    查询一下是否有DDL锁,你那个查询的是DML锁select * from DBA_DDL_LOCKS --------这个是查询DDL锁,看看存储过程是否被锁住了。
      

  2.   

    2.根据sid找到serial#select SERIAL# from V$session where sid=70  ---70是第一个SQL语句查出来的SID根据sid和serial#杀掉存储过程的锁alter system kill session '70,1';  --杀掉所有的SID看看
      

  3.   

    这个是数据库级别的
    还有一个就是操作系统级别的杀死进程
    根据SID 找出SPID,在服务器中进行KILL,
    或者就是由于我说的DDL锁造成的。
      

  4.   

    1、如果使用alter system kill session无法杀掉的进程。
    可以在操作系统级强行杀掉进程或线程。2、使用如下语句取得spid即为进程(unix,linux)或线程(windows)ID。
    SELECT p.SPID, s.OSUSER, p.PROGRAM
      FROM v$session s, v$process p
     WHERE s.PADDR = p.ADDR
       AND s.SID =
           (SELECT t.SID FROM v$access t WHERE t.OBJECT = upper('对象名'));3、强终杀掉线程或进程
    UNIX、LINUX下使用(如:SPID为6666)
    $ kill -9 6666WINDOWS下使用(如:SPID为6666,实例名<ORACLE_SID>为ORCL),则
    C:\>orakill ORCL 6666
      

  5.   

    3、强终杀掉线程或进程
    UNIX、LINUX下使用(如:SPID为6666)
    $ kill -9 6666
    这个很强大的