文档章节

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

Vimeo
 Vimeo
发布于 2016/05/13 23:19
字数 344
阅读 62
收藏 4

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

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;

查看,系统内无索引外键的脚本,移步:

http://my.oschina.net/1272149624/blog/612008

© 著作权归作者所有

上一篇: Oracle Oratop
Vimeo
粉丝 5
博文 107
码字总数 35893
作品 0
南昌
数据库管理员
私信 提问
一篇文全面解析Oracle死锁的分类及模拟

作者介绍 前段时间工作上碰到了一个很奇怪的死锁问题,一般来说,由业务发出来的SQL是不太可能会产生死锁的,不过确确实实产生了,而且还是ITL死锁!于是借此机会,也把死锁可能出现的情况都...

李华荣
2016/10/27
0
0
案例分析:你造吗?有个ORA-60死锁的解决方案

问题综述 1 这段时间应用一直被一个诡异的 ORA-00060 的错误所困扰,众所周知,造成 ORA-00060 的原因是由于应用逻辑,而非 Oracle 数据库自己,之所以说诡异(“诡异”可能不准确,只能说这种...

技术小能手
2018/07/03
0
0
从trc查找死锁的问题

今天alert日志报ORA-00060的死锁错误,查看trc文件: * 2013-09-29 01:03:47.762 SERVICE NAME:(SYS$USERS) 2013-09-29 01:03:47.744 ** SESSION ID:(997.178) 2013-09-29 01:03:47.744 DEA......

bisal
2013/09/29
0
0
oracle开发注意事项小结

1)统计信息里面,有两行和性能有关。 第一行表示,从buffer cache到PGA的结果集的往返次数 第二行表示,访问到的数据块里面的行的个数 计算: SQL*Net roundtrips=[ rows processed/arrays...

长平狐
2012/09/19
178
0
MySQL中的行级锁,表级锁,页级锁

在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足。 在数据库的锁机制中介绍过,在DBMS中,可以按照锁的粒度把数据库锁分为行级...

Hosee
2016/06/01
469
0

没有更多内容

加载失败,请刷新页面

加载更多

解决vim打开之后乱码的问题

在Windows中的文档,传输到Linux系统中(使用rz命令),出现乱码 root@localhost ~]# rpm -qf `which iconv` glibc-common-2.17-105.el7.x86_64 [root@localhost ~]# rpm -ihv /mnt/Packages......

寰宇01
40分钟前
2
0
aldi 2017年1月记录

../../tools/CBLAS/lib/cblas_LINUX.a ../../tools/lapack-3.4.2/liblapacke.a \../../tools/lapack-3.4.2/librefblas.a -lgfortran \../../tools/lapack-3.4.2/liblapack.a \../../......

MtrS
41分钟前
3
0
Choerodon如何进行日志收集与告警

作者:董文启 应用程序日志是由软件应用程序记录的事件文件, 它一般包含错误,信息事件和警告。一个良好的日志系统有助于快速发现问题,定位问题,同时也为业务分析起到一定的作用。 传统E...

Choerodon
53分钟前
3
0
js二维码生成插件“jquery.qrcode.min.js”

<!doctype html> <html> <head> <meta charset="utf-8" /> <title>生成二维码</title> <script type='text/javascript' src='http://cdn.staticfile.org/jquery/2.1.1/jquery.min.js'></scri......

泉天下
56分钟前
2
0
Spring AOP之同一个对象方法内部自调用导致事务失效问题

对于像我这种喜欢滥用AOP的程序员,遇到坑也是习惯了,不仅仅是事务,其实只要脱离了Spring容器管理的所有对象,对于SpringAOP的注解都会失效,因为他们不是Spring容器的代理类,SpringAOP,就切入不...

xiaomin0322
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部