oracle如何解除死锁[进程互相锁死]

oracle如何解除死锁[进程互相锁死]
data directory:v$session,v$lock
1 rem 查询目前正在等待锁资源的用户
select a.username,a.sid,a.serial#,b.id1 from v$session a, v$lock b
where a.lockwait=b.kaddr

USERNAME SID SERIAL# ID1
------------------------------ ---------- ---------- ----------
TEST 143 27 196632

2 rem 查询锁住其它用户进程
select a.username,a.sid,a.serial#,b.id1 from v$session a,v$lock b
where b.id1 in
(select distinct e.id1
from v$session d,v$lock e
where d.lockwait=e.kaddr)
and a.sid=b.sid
and b.request=0;

USERNAME SID SERIAL# ID1
------------------------------ ---------- ---------- ----------
TEST 159 5 196632

3 上述两次查询说明ID1同为196632的会话中 ‘159,5’锁住了会话‘143,27’。
rem 强制将锁进程解开:alter system kill session 'SID,SERIAL#'
alter system kill session '159,5';

将锁进程解开后,会要求用户执行commit或rollback命令,使事物终结。

附:模拟死锁产生
1 rem 测试表数据t2内容如下:
select * from t2;
ID
----------
1
2
3
2 seesion 1:
rem 更新第一条数据
update t2 set id='11' where id='1';
session 2
rem 更新第二条数据
update t2 set id='22' where id='2';
3 session 1
rem 更新第二条数据
update t2 set id='22' where id='2';
session 1
rem 更新第一条数据
update t2 set id='11' where id='1';

第2、3步做完后,将会产生死锁。
采取上述解锁的方法,可解除死锁。
参考:《oracle9i数据库管理员使用大全》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值