解决oracle存储过程死锁问题

最近在写存储过程的时候,因为要测试存储过程的运行情况,中途操作失误,导致存储过程死锁,写了半天的东西编译不了了,没办法只能重新创建一个存储过程,以前的那个删也删不掉,用也用不了,很难受,最后是重启了数据库才解决这个问题。不过现在找到一种更简单的方法解决这个问题。
四步解决:
1、执行语句

select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;

查出来哪些对象被锁,得到sid
2、还是执行语句
alter system kill session '24,111'; (其中24,111分别是上面查询出的sid,serial#)
kill该session (sid,serial#即为上面查出来的sid和serial#)
注:此语句只是将该存储过程的状态由active改为了killed,并没有彻底的释放该存储过程,所以还是编译不了存储过程
3、要解决这一问题只能在OS上杀死这一线程(进程)了
执行语句获得线程(进程)号

select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=24 

(24是上面的sid)
4、在服务器上执行下列命令(数据库在哪台机子,就在哪台机子执行)

orakill sid thread

orakill是oracle提供的命令,一般装oracle的时候,已经配上环境变量,这里可直接运行
其中sid为该存储过程所在数据库的实例名我的为orcl
thread即为线程(进程)号,即第三步查出来的spid。

以上就是解决存储过程的死锁问题了,也是从别人那取经回来的东西,写出来,主要就是为了加强记忆

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值