主页 > 知识库 > Oracle外键不加索引引起死锁示例

Oracle外键不加索引引起死锁示例

热门标签:电渠外呼系统 车玛仕极限运动场所地图标注 腾讯地图标注要费用吗 N个你智能电销机器人 七日杀a19.5全地图标注 高德地图标注公司名字大全 地图标注怎么保存 广东营销智能外呼系统商家 外呼电话系统用卡吗
--创建一个表,此表作为子表

create table fk_t as select *from user_objects;

delete from fk_t where object_id is null;

commit;

--创建一个表,此表作为父表

create table pk_t as select *from user_objects;

delete from pk_t where object_id is null;

commit;

--创建父表的主键

alter table PK_t add constraintpk_pktable primary key (OBJECT_ID);

--创建子表的外键

alter table FK_t addconstraint fk_fktable foreign key (OBJECT_ID) references pk_t (OBJECT_ID);

--session1:执行一个删除操作,这时候在子表和父表上都加了一个Row-S(SX)锁

delete from fk_t whereobject_id=100;

delete from pk_t where object_id=100;

--session2:执行另一个删除操作,发现这时候第二个删除语句等待

delete from fk_t whereobject_id=200;

delete from pk_t whereobject_id=200;

--回到session1:死锁马上发生

delete from pk_t whereobject_id=100;

session2中报错:

SQL> delete from pk_table where object_id=200;
delete from pk_table where object_id=200
*
第 1 行出现错误:

ORA-00060: 等待资源时检测到死锁

当对子表的外键列添加索引后,死锁被消除,因为这时删除父表记录不需要对子表加表级锁。

--为外键建立索引

create index ind_pk_object_id on fk_t(object_id) nologging;

--重复上面的操作session1

delete from fk_t whereobject_id=100;

delete from pk_t whereobject_id=100;

--session2

delete from fk_t whereobject_id=200;

delete from pk_t whereobject_id=200;

--回到session1不会发生死锁

delete from pk_t whereobject_id=100;
您可能感兴趣的文章:
  • Oracle 查询死锁并解锁的终极处理方法
  • 讲解Oracle数据库中结束死锁进程的一般方法
  • Oracle数据表中的死锁情况解决方法
  • 简单说明Oracle数据库中对死锁的查询及解决方法
  • oracle 会话 死锁 执行sql 执行job的方法
  • Oracle删除死锁进程的方法
  • Oracle对于死锁的处理方法
  • Oracle 死锁的检测查询及处理

标签:赣州 苏州 来宾 大兴安岭 辽宁 玉树 枣庄 长沙

巨人网络通讯声明:本文标题《Oracle外键不加索引引起死锁示例》,本文关键词  Oracle,外键,不加,索引,引起,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《Oracle外键不加索引引起死锁示例》相关的同类信息!
  • 本页收集关于Oracle外键不加索引引起死锁示例的相关信息资讯供网民参考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推荐文章