Oracle外鍵不加索引引起死鎖示例
create table fk_t as select *from user_objects;
delete from fk_t where object_id is null;
commit;
--創(chuàng)建一個(gè)表,此表作為父表
create table pk_t as select *from user_objects;
delete from pk_t where object_id is null;
commit;
--創(chuàng)建父表的主鍵
alter table PK_t add constraintpk_pktable primary key (OBJECT_ID);
--創(chuàng)建子表的外鍵
alter table FK_t addconstraint fk_fktable foreign key (OBJECT_ID) references pk_t (OBJECT_ID);
--session1:執(zhí)行一個(gè)刪除操作,這時(shí)候在子表和父表上都加了一個(gè)Row-S(SX)鎖
delete from fk_t whereobject_id=100;
delete from pk_t where object_id=100;
--session2:執(zhí)行另一個(gè)刪除操作,發(fā)現(xiàn)這時(shí)候第二個(gè)刪除語(yǔ)句等待
delete from fk_t whereobject_id=200;
delete from pk_t whereobject_id=200;
--回到session1:死鎖馬上發(fā)生
delete from pk_t whereobject_id=100;
session2中報(bào)錯(cuò):
SQL> delete from pk_table where object_id=200;
delete from pk_table where object_id=200
*
第 1 行出現(xiàn)錯(cuò)誤:
ORA-00060: 等待資源時(shí)檢測(cè)到死鎖
當(dāng)對(duì)子表的外鍵列添加索引后,死鎖被消除,因?yàn)檫@時(shí)刪除父表記錄不需要對(duì)子表加表級(jí)鎖。
--為外鍵建立索引
create index ind_pk_object_id on fk_t(object_id) nologging;
--重復(fù)上面的操作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不會(huì)發(fā)生死鎖
delete from pk_t whereobject_id=100;
相關(guān)文章
EF 配置Oracle數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)連接字符串的實(shí)例
下面小編就為大家?guī)?lái)一篇EF 配置Oracle數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)連接字符串的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04Oracle進(jìn)階DECODE函數(shù)使用詳解
這篇文章介紹了Oracle進(jìn)階DECODE函數(shù)的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12Oracle 數(shù)據(jù)庫(kù)優(yōu)化實(shí)戰(zhàn)心得總結(jié)
優(yōu)化sql語(yǔ)句、優(yōu)化io、表設(shè)計(jì)優(yōu)化、充分利用系統(tǒng)cpu資源、優(yōu)化數(shù)據(jù)庫(kù)連接、充分利用數(shù)據(jù)的后臺(tái)處理方案減少網(wǎng)絡(luò)流量,實(shí)施系統(tǒng)資源管理分配計(jì)劃等等,感興趣的朋友可以參考下哈2013-06-06Oracle數(shù)據(jù)庫(kù) DGbroker三種保護(hù)模式的切換
這篇文章主要介紹了Oracle數(shù)據(jù)庫(kù) DGbroker三種保護(hù)模式的切換 的相關(guān)資料,需要的朋友可以參考下2015-12-12WINDOWS下使用DOS命令行連接oracle數(shù)據(jù)庫(kù)
本文講述了通過(guò)windows下的DOS命令連接oracle數(shù)據(jù)庫(kù)并進(jìn)行簡(jiǎn)單操作的方法2018-03-03常見(jiàn)數(shù)據(jù)庫(kù)系統(tǒng)比較 Oracle數(shù)據(jù)庫(kù)
常見(jiàn)數(shù)據(jù)庫(kù)系統(tǒng)比較 Oracle數(shù)據(jù)庫(kù)...2007-03-03PLSQL安裝、漢化和激活的方法步驟實(shí)現(xiàn)
這篇文章主要介紹了PLSQL安裝、漢化和激活的方法步驟實(shí)現(xiàn),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09