Oracle 表死锁 解决

本文提供了一种在Oracle数据库中解决表死锁的方法。通过查询锁定的对象和会话信息来定位死锁源,并使用特定命令杀死导致死锁的会话。

问题:更新的Update语句一直在更新 卡在执行update语句的地方。

清除的方法:

Oracle表死锁解除

 
我是在plsql中处理 
1.先查询 
select * from v$locked_object v, dba_objects o 
where v.object_id = o.object_id 
 
2.记录死锁表的session_id 
 
3.Tools →Sessions 
找到session_id对应Sessions窗口里的Sid(可以排下序再找比较快),在Status 列 右键 
Kill. 
 
即成,注意要有操作权限的用户才行
 
 
oracle 数据表死锁解决方法 Oracle
查询死锁信息的语句:
    select a.owner,  
          a.object_name,  
          b.xidusn,  
          b.xidslot,  
          b.xidsqn,  
          b.session_id,  
          b.oracle_username,  
          b.os_user_name,  
          b.process,  
          b.locked_mode,  
          c.machine,  
          c.status,  
          c.server,  
          c.sid,  
          c.serial#,  
          c.program  
     from all_objects a, v$locked_object b, sys.gv_$session c  
    where (a.object_id = b.object_id)  
      and (b.process = c.process)  
    order by 1, 2  

 ---------------------------------------------

第一步:查看是否有死锁存在,查出有数据则代表有死锁:

    select p.spid,c.object_name,b.session_id,b.oracle_username,b.os_user_name  from v$process p,v$session a,v$locked_object b,all_objects   c     
    where  p.addr=a.paddr     
    and    a.process=b.process     
    and    c.object_id=b.object_id   

 

第二步:查出死锁session的精确信息【sid 为前面语句的session_id】
SELECT sid, serial#, username, osuser FROM v$session where sid='第一步查询出来的session_id';

 第三步:删除死锁【第一个参数为sid,第二个为serial#】

alter system kill session 'sid,serial#';

 

如果还不能解决,
select pro.spid from v$session ses,v$process pro where ses.sid=XX and ses.paddr=pro.addr;  

 其中sid用死锁的sid替换。

    1.exit      
    2.ps -ef|grep spid   



---------------------------------------------

其中spid是这个进程的进程号,kill掉这个Oracle进程。

-------------------------------------------------分割线

 查询死锁:
select p.spid,c.object_name,b.session_id,b.oracle_username,b.os_user_name from 
v$process p,v$session a, v$locked_object b,all_objects c 
where p.addr=a.paddr and a.process=b.process and c.object_id=b.object_id 

 

SELECT sid, serial#, username, osuser FROM v$session where sid='1250';--根据上面的Session_id查询到 serial#
alter system kill session '1250,29967'---1250就是上面的sid,29967就是上面的serial#

 

 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/wangjunwei/p/4472298.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值