oracle 数据表死锁解决方法 Oracle
查询死锁信息的语句:
---------------------------------------------
第一步:查看是否有死锁存在,查出有数据则代表有死锁:
第二步:查出死锁session的精确信息【sid 为前面语句的session_id】
第三步:删除死锁【第一个参数为sid,第二个为serial#】
如果还不能解决,
其中sid用死锁的sid替换。
其中spid是这个进程的进程号,kill掉这个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进程。