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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql行鎖和死鎖檢測MySql
- 檢視oracle死鎖程式並結束死鎖Oracle
- 死鎖檢測及解決
- oracle 檢視死鎖語句Oracle
- LiteOS:SpinLock自旋鎖及LockDep死鎖檢測
- 淺談 Linux 的死鎖檢測Linux
- RAC全域性死鎖檢測時間
- oracle死鎖的檢視及kill方法Oracle
- oracle死鎖測試與解決Oracle
- Linux 死鎖檢測模組 Lockdep 簡介Linux
- golang 執行時死鎖排查和檢測Golang
- oracle 死鎖Oracle
- 殺死Oracle死鎖程式Oracle
- 作業系統(5) 死鎖的概念 死鎖產生的必要條件 死鎖的處理策略 預防死鎖 避免死鎖 死鎖的檢測和解除 銀行家演算法作業系統演算法
- Oracle死鎖的檢視以及解決辦法Oracle
- oracle 死鎖發生的測試用例Oracle
- sybase空間監控和死鎖檢測語句
- Oracle 死鎖處理Oracle
- Oracle死鎖處理Oracle
- ORACLE 死鎖分析過程Oracle
- oracle 死鎖表解決方法Oracle
- oracle-tom死鎖演示Oracle
- 使用jstack檢測Java應用的死鎖(deadlock)狀態JSJava
- ORACLE死鎖及處理方式Oracle
- oracle 死鎖查詢處理Oracle
- Oracle死鎖原因產生分析Oracle
- 完全乾掉Oracle死鎖程式Oracle
- 【DEADLOCK】Oracle“死鎖”模擬Oracle
- oracle殺死鎖表的程式Oracle
- [翻譯]:SQL死鎖-阻塞探測SQL
- Java鎖——死鎖Java
- Oracle死鎖一例(ORA-00060),鎖表導致的業務死鎖問題Oracle
- 解決Oracle死鎖的快捷方法Oracle
- 關於Oracle死鎖處理方法Oracle
- 關於oracle死鎖的模擬Oracle
- oracle自治事務引起的死鎖Oracle
- 解決Oracle資料庫死鎖Oracle資料庫
- 從OS中kill ORACLE死鎖程式Oracle