ORACLE死鎖檢測
ORACLE死鎖檢測:
以下測試使用scott使用者的emp作測試物件,
測試目的是檢測oracle死鎖檢測功能。
1.在shell1使用sqlplus連線scott使用者,並對emp的ename='SMITH'記錄進行for update鎖定。
SQL> select empno, ename from emp;
EMPNO ENAME
---------- ----------
7369 SMITH
7499 ALLEN
7521 WARD
SQL> select ename from emp where ename = 'SMITH' for update;
ENAME
----------
SMITH
2.在shell2中使用sqlplus連線scott使用者,並對emp的ename='ALLEN'記錄進行for update鎖定。
SQL> select ename from emp where ename = 'ALLEN' for update;
ENAME
----------
ALLEN
3.在shell1中,繼續對emp的ename='ALLEN'記錄進行for update鎖定。
SQL> select ename from emp where ename = 'ALLEN' for update;
4.在shell1中,繼續對emp的ename='SMITH'記錄進行for update鎖定,在過了3秒左右的時間,SQLPLUS報出死鎖錯誤,並退出等待。
SQL> select ename from emp where ename = 'SMITH' for update;
select ename from emp where ename = 'SMITH' for update
*
ERROR at line 1:
ORA-00060: deadlock detected while waiting for resource
在第四步發出而未報出死鎖錯誤前使用sys使用者觀察鎖的狀態:
SQL> select SID,TYPE,LMODE,REQUEST,BLOCK from v$lock where type = 'TX';
SID TY LMODE REQUEST BLOCK
---------- -- ---------- ---------- ----------
142 TX 0 6 0
154 TX 0 6 0
142 TX 6 0 1
154 TX 6 0 1
報出死鎖錯誤後以sys使用者觀察鎖的狀態:
SQL> select OBJECT_ID,SESSION_ID,LOCKED_MODE from v$locked_object;
OBJECT_ID SESSION_ID LOCKED_MODE
---------- ---------- -----------
51148 142 3
51148 154 3
SQL> select SID,TYPE,LMODE,REQUEST,BLOCK from v$lock where type = 'TX';
SID TY LMODE REQUEST BLOCK
---------- -- ---------- ---------- ----------
154 TX 0 6 0
142 TX 6 0 1
154 TX 6 0 0
SQL> select WAITING_SESSION, HOLDING_SESSION from dba_waiters;
WAITING_SESSION HOLDING_SESSION
--------------- ---------------
154 142
SID=154為shell1
SID=142為shell2
從以上檢視可以看出,
未報死鎖錯誤前:
142持有2個TX鎖,其中一個阻塞另一鎖(154)。
154持有2個TX鎖,其中一個阻塞另一鎖(142)。
形成死鎖狀態。
報死鎖錯誤後:
142持有1個TX鎖,並阻塞另一鎖(154),而第二次發出的鎖定已被oracle清除。
154持有1個TX鎖並且有一個鎖處於等待狀態(等待142)。
解除死鎖狀態。
避免死鎖的方法:
按相同順序訪問資源,從而避免互鎖和死鎖的發生。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13605188/viewspace-626444/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 檢視oracle死鎖程式並結束死鎖Oracle
- mysql行鎖和死鎖檢測MySql
- LiteOS:SpinLock自旋鎖及LockDep死鎖檢測
- golang 執行時死鎖排查和檢測Golang
- 作業系統(5) 死鎖的概念 死鎖產生的必要條件 死鎖的處理策略 預防死鎖 避免死鎖 死鎖的檢測和解除 銀行家演算法作業系統演算法
- 使用jstack檢測Java應用的死鎖(deadlock)狀態JSJava
- Oracle死鎖一例(ORA-00060),鎖表導致的業務死鎖問題Oracle
- 記一次Oracle死鎖/阻塞排查Oracle
- 解決Oracle死鎖問題步驟Oracle
- 【Oracle】死鎖的產生與處理Oracle
- oracle檢視被鎖的表和解鎖Oracle
- [翻譯]:SQL死鎖-阻塞探測SQL
- 檢視ORACLE中鎖定物件Oracle物件
- 死鎖
- 檢視oracle被鎖的表是誰鎖的Oracle
- 僅4步,就可通過SQL進行分散式死鎖的檢測與消除SQL分散式
- 什麼是死鎖?如何解決死鎖?
- 面試官:什麼是死鎖?怎麼排查死鎖?怎麼避免死鎖?面試
- 死鎖概述
- 例項詳解 Java 死鎖與破解死鎖Java
- 死鎖和可重入鎖
- MySQL 死鎖和鎖等待MySql
- 面試:什麼是死鎖,如何避免或解決死鎖;MySQL中的死鎖現象,MySQL死鎖如何解決面試MySql
- SQL SERVER死鎖查詢,死鎖分析,解鎖,查詢佔用SQLServer
- MySQL死鎖系列-線上死鎖問題排查思路MySql
- 死鎖是什麼?如何預防和避免死鎖?
- JAVA死鎖排查-效能測試問題排查思路Java
- GCD 死鎖原因GC
- 死鎖案例二
- 死鎖案例三
- 併發:死鎖
- 遭遇ITL死鎖
- 死鎖-舉例
- 死鎖案例分析
- MySQL:一個死鎖分析 (未分析出來的死鎖)MySql
- oracle鎖級別相關測試Oracle
- 在Unity中檢測死迴圈和卡死Unity
- 如何避免死鎖和活鎖? - simar
- SQLServer的死鎖分析(1):頁鎖SQLServer