oracle-tom死鎖演示
Oracle 中極少出現死鎖,甚至可以認為幾乎不存在。通常情況下必須人為地提供條件才會產生死鎖
死鎖原因:導致死鎖的頭號原因是外來鍵未加索引,第二號原因是表上的點陣圖索引遭到併發更新
在以下兩種情況下,Oracle 在修改父表後會對子表加一個全表鎖:
如果更新了父表的主鍵(倘若遵循關聯式資料庫的原則,即主鍵應當是不可變的,這種情況就很少見),由於外來鍵上沒有索引,所以子表會被鎖住。如果刪除了父表中的一行,整個子表也會被鎖住(由於外來鍵上沒有索引)。
會話1:
SQL> show user;
USER is ""
SQL> conn /as sysdba
Connected.
SQL> show user;
USER is "SYS"
SQL> create table p ( x int primary key );
Table created.
SQL> create table c ( x references p );
Table created.
SQL> insert into p values ( 1 );
insert into p values ( 2 );
commit;
1 row created.
SQL>
1 row created.
SQL> insert into c values ( 2 );
1 row created.
SQL>
會話2:
SQL> conn scott/scott
Connected.
SQL> conn /as sysdba
Connected.
SQL> desc c
Name Null? Type
----------------------------------------- -------- ----------------------------
X NUMBER(38)
SQL> desc p
Name Null? Type
----------------------------------------- -------- ----------------------------
X NOT NULL NUMBER(38)
SQL> delete from p where x=1;
這個時候會話2就被阻塞了。它在執行刪除之前試圖對錶C 加一個全表鎖。現在,別的會話都不能對C 中的任何行執行DELETE、INSERT 或UPDATE(已經開始的會話可以繼續[3],但是新會話將無法修改C)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15720542/viewspace-721840/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 死鎖
- 什麼是死鎖?如何解決死鎖?
- 面試官:什麼是死鎖?怎麼排查死鎖?怎麼避免死鎖?面試
- 死鎖概述
- 作業系統(5) 死鎖的概念 死鎖產生的必要條件 死鎖的處理策略 預防死鎖 避免死鎖 死鎖的檢測和解除 銀行家演算法作業系統演算法
- 檢視oracle死鎖程式並結束死鎖Oracle
- 例項詳解 Java 死鎖與破解死鎖Java
- 死鎖和可重入鎖
- MySQL 死鎖和鎖等待MySql
- 面試:什麼是死鎖,如何避免或解決死鎖;MySQL中的死鎖現象,MySQL死鎖如何解決面試MySql
- SQL SERVER死鎖查詢,死鎖分析,解鎖,查詢佔用SQLServer
- MySQL死鎖系列-線上死鎖問題排查思路MySql
- 死鎖是什麼?如何預防和避免死鎖?
- GCD 死鎖原因GC
- 死鎖案例二
- 死鎖案例三
- 併發:死鎖
- 遭遇ITL死鎖
- 死鎖-舉例
- 死鎖案例分析
- InnoDB鎖衝突案例演示
- MySQL:一個死鎖分析 (未分析出來的死鎖)MySql
- 如何避免死鎖和活鎖? - simar
- SQLServer的死鎖分析(1):頁鎖SQLServer
- mysql行鎖和死鎖檢測MySql
- 鎖的使用與死鎖的避免
- Mysql 兩階段鎖和死鎖MySql
- MySQL記錄鎖、間隙鎖、臨鍵鎖小案例演示MySql
- Java 中的死鎖Java
- MySQL 死鎖解決MySql
- GreatSQL 死鎖案例分析SQL
- 11.死鎖(deadlocks)
- PostgreSQL 死鎖異常SQL
- SQL Server 的死鎖SQLServer
- MySQL解決死鎖MySql
- PostgreSQL死鎖相關SQL
- MySQL死鎖問題MySql
- 剖析6個MySQL死鎖案例的原因以及死鎖預防策略MySql
- MySQL鎖等待與死鎖問題分析MySql