两个会话互相持有对方想要的资源。
下面word就是我测试文档。
1.doc
查看双方会话所持有的事务
查看死锁的事务
create table S_T
(
username VARCHAR2(30),
sid NUMBER,
rbs NUMBER,
slot NUMBER,
seq NUMBER,
lmode NUMBER,
request NUMBER,
times TIMESTAMP(6) default sysdate
)
insert into s_t
(USERNAME, SID, RBS, SLOT, SEQ, LMODE, REQUEST)
select T1.USERNAME,
T2.SID,
TRUNC(T2.ID1 / POWER(2, 16)) RBS,
BITAND(ID1, TO_NUMBER('ffff', 'xxxx')) + 0 slot,
id2 seq,
lmode,
request
from v$session t1, v$lock t2
where t2.type = 'TX'
and t2.sid = t1.sid
and t1.username = 'SJZYK';
commit;
每隔一秒钟提交一次
其中在某一秒中出现了四条数据,事务id分别相同,但是知道事务出现变化??这就是死锁的作用。。。。
为什么两个会话持有对方资源,就是死锁,其他的是阻塞???
下面是我的想法以供参考
A B
T1 T2
T2 T1
commit;要不然先执行A,后执行B,反之AB颠倒。
如果A先提交了,首先执行的B给t2添加排它锁,这么说的话,A的t2就提交不了。同理:B的t1就无法提交。两者之间互相冲突,故引起oracle的死锁。