您的位置:首页 > 数据库 > Oracle

Oracle 表死锁 解决

2015-05-02 17:54 218 查看
问题:更新的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#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: