ITPub博客

首页 > 数据库 > Oracle > [20140210]主外键和阻塞.txt

[20140210]主外键和阻塞.txt

原创 Oracle 作者:lfree 时间:2014-02-11 10:02:21 0 删除 编辑

[20140210]主外键和阻塞.txt

许多人都知道如果几个表之间存在主外键关系的情况下,许多情况下会出现阻塞情况。
具体的例子还很多,当然如果我觉得最常见如果你不修改主外键值,外键的索引多数情况下可以不建。
而且有些外键的索引建立有点多余的。

今天我看了一篇blog,链接如下:
http://blog.yavor.info/?p=564&lang=en

给出的例子很奇特,就是这个问题在11g下会出现阻塞,而10g下不会。12c下我也做了测试,也不会,
自己重复测试做一个记录:

1.12c的情况:
SCOTT@test01p> @ver
BANNER                                                                               CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0

--数据准备
drop table t2 purge;
drop table t1 purge;
create table t1 (pk number primary key);
create table t2 (pk number primary key, fk number references t1(pk));
 
insert into t1 values (1);
insert into t1 values (2);
insert into t1 values (3);
insert into t1 values (4);
 
insert into t2 values (11, 1);
insert into t2 values (21, 2);
insert into t2 values (22, 2);
insert into t2 values (31, 3);
insert into t2 values (32, 3);
insert into t2 values (33, 3);
commit;

--会话1:
insert into t1 values (5);

--会话2:
delete from t1 where pk=4;

--没有出现阻塞情况!
--从这里看确实出现了修改主外键值的情况。但是没有阻塞的情况。
--其实我的理解这是非常特殊的情况,插入的值一定不能重复在t1表,也就是不会出现T2中,
--当然也有许多特殊情况,比如延迟references等等,先插入T2表的数据,在插入T1表数据,
--好像这样操作很少。
--这样的插入T1表不应该"阻塞"T2表。如果不"阻塞"T2表,delete from t1 where pk=4;时候
--就不会出现这种情况。出现"阻塞"的情况:

--会话1:
delete from t2 where fk=1;
1 row deleted.

--会话2:
delete from t1 where pk=4;
--hung!因为级联删除t2表的fk=4,t2表没有fk的索引,oracle要"lock"表t2.


2.11g的情况:
SCOTT@test> @ver
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

--重复以上测试,出现阻塞情况。

3.10g的情况:
@ver

BANNER
-----------------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi

--重复以上测试,没有出现阻塞情况。

4.总结:
感觉oracle在开发上存在一些问题,也许不知道内部如何管理的。10g已经解决的问题,11g又出现。
难道10.2.0.1的版本也有问题吗?手头已经没有这些版本,无法再测试。

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

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    2508
  • 访问量
    6310763