ITPub博客

首页 > 数据库 > Oracle > oracle 死锁

oracle 死锁

原创 Oracle 作者:gh_95533 时间:2015-07-21 23:03:27 0 删除 编辑

两个会话互相持有对方想要的资源。

下面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的死锁。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29162273/viewspace-1743818/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: oracle表空间压缩
请登录后发表评论 登录
全部评论

注册时间:2014-10-24

  • 博文量
    44
  • 访问量
    105367