<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont

本文涉及的产品
转发路由器TR,750小时连接 100GB跨地域
简介: 转载链接:http://www.jb51.net/article/50161.htm 这篇文章主要介绍了Oracle外键不加索引引起死锁的情况及解决,需要的朋友可以参考下 --创建一个表,此表作...

转载链接:http://www.jb51.net/article/50161.htm

这篇文章主要介绍了Oracle外键不加索引引起死锁的情况及解决,需要的朋友可以参考下

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

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 constraint pk_pktable primary key (OBJECT_ID);

--创建子表的外键

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

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

delete from fk_t where object_id=100;

delete from pk_t where object_id=100;

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

delete from fk_t where object_id=200;

delete from pk_t where object_id=200;

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

delete from pk_t where object_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 where object_id=100;

delete from pk_t where object_id=100;

--session2

delete from fk_t where object_id=200;

delete from pk_t where object_id=200;

--回到session1不会发生死锁

delete from pk_t where object_id=100; 



关于外键不加索引引起死锁的详细分析参考http://blog.csdn.net/robinson1988/article/details/38421991


经过验证,如果外键不加索引的确会出现死锁。因此,外键务必添加索引。


相关文章
|
Web App开发 前端开发
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
PipeMapRed.waitOutputThreads(): subprocess failed with code X ,这里code X对应的信息如下:error code 1: Operation not perm...
940 0
|
Web App开发 前端开发 Java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
 Connection reset by peer的常见原因: 1)服务器的并发连接数超过了其承载量,服务器会将其中一些连接关闭;    如果知道实际连接服务器的并发客户数没有超过服务器的承载量,看下有没有网络流量异常。
856 0
|
Web App开发 存储 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
NoSuchObjectException(message:There is no database named cloudera_manager_metastore_canary_test_db_hive_hivemetastore_df61080e04cd7eb36c4336f71b5a8bc4) at org.
1077 0
|
Web App开发 前端开发 数据库
|
Web App开发 监控 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
Spark Streaming 的一些问题,做选型前关注这些问题可以有效的降低使用风险。 checkpoint checkpoint 是个很好的恢复机制。
933 0
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
关于reduce边join,其最重要的是使用MultipleInputs.addInputPath这个api对不同的表使用不同的Map,然后在每个Map里做一下该表的标识,最后到了Reduce端再根据标识区分对应的表! ...
781 0
|
新零售 大数据
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
电商数据分析基础指标体系 傅志华 傅志华 信息流、物流和资金流三大平台是电子商务的三个最为重要的平台。而电子商务信息系统最核心的能力是大数据能力,包括大数据处理、数据分析和数据挖掘能力。
1288 0
|
关系型数据库 数据库
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
mysql数据库切分 前言 通过MySQLReplication功能所实现的扩展总是会受到数据库大小的限制,一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我们还是会面临到扩展瓶颈。
2030 0
|
Web App开发 机器学习/深度学习 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
  Caffe Torch Theano TensorFlow Language C++, Python Lua Python Python Pretrained Yes ++ Yes ++ Ye...
647 0

热门文章

最新文章