--創(chuàng)建一個(gè)表,此表作為子表
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;
Oracle外鍵不加索引引起死鎖示例
2019-12-09 15:53Oracle教程網(wǎng) Oracle
這篇文章主要介紹了Oracle外鍵不加索引引起死鎖的情況及解決,需要的朋友可以參考下
延伸 · 閱讀
- 2022-03-11C++多線程之互斥鎖與死鎖
- 2022-03-11MySQL的索引你了解嗎
- 2022-03-09阿里面試MySQL死鎖問題的處理
- 2022-03-09MySQL視圖和索引專篇精講
- 2022-03-08一篇帶給你MySQL索引知識(shí)詳解
- 2022-03-07Oracle Linux 能否成為企業(yè)級(jí) CentOS 的替代品?
- Oracle
Oracle中簡(jiǎn)單查詢、限定查詢、數(shù)據(jù)排序SQL語(yǔ)句范例和詳細(xì)注解
這篇文章主要介紹了Oracle中簡(jiǎn)單查詢、限定查詢、數(shù)據(jù)排序SQL語(yǔ)句范例和詳細(xì)注解,對(duì)查詢語(yǔ)法一并做了介紹,需要的朋友可以參考下 ...
- Oracle
關(guān)于Oracle多表連接,提高效率,性能優(yōu)化操作
這篇文章主要介紹了關(guān)于Oracle多表連接,提高效率,性能優(yōu)化操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧...
- Oracle
Oracle 12c Release 2 RAC 安裝 Oracle Linux 7
一、概述 本文主要闡述基于ASM 構(gòu)建 Oracle 12c RAC數(shù)據(jù)庫(kù)的過程說明 1、系統(tǒng)版本要求 確保 Oracle Linux 版本為 6 或更高版本。 確保兩個(gè)節(jié)點(diǎn)的 Oracle Linux 內(nèi)核版...
- Oracle
關(guān)于SQL執(zhí)行計(jì)劃錯(cuò)誤導(dǎo)致臨時(shí)表空間不足的問題
故障現(xiàn)象:臨時(shí)表空間不足的問題已經(jīng)報(bào)錯(cuò)過3次,客戶也煩了,前兩次都是同事添加5G的數(shù)據(jù)文件,目前已經(jīng)達(dá)到40G,占用臨時(shí)表空間主要是distinct 和gro...
- Oracle
詳解Oracle自定義異常示例
這篇文章主要介紹了詳解Oracle自定義異常示例的相關(guān)資料,需要的朋友可以參考下 ...
- Oracle
Oracle中的SUM用法講解
今天小編就為大家分享一篇關(guān)于Oracle中的SUM用法講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧...
- Oracle
Oracle連接配置解讀
這篇文章主要介紹了Oracle連接配置解讀,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編...
- Oracle
深入ORACLE遷移到MYSQL的總結(jié)分析
本篇文章是對(duì)ORACLE遷移到MYSQL進(jìn)行了詳細(xì)的總結(jié)與分析,需要的朋友參考下 ...