當多個用戶正在使用應用程序時,我一直在我的應用程序中經常發現「在等待資源時檢測到ora-00060死鎖」錯誤。我從Oracle管理員那裏獲得了跟蹤文件,但在閱讀時需要幫助。以下是來自跟蹤文件的一些數據,我希望這將有助於查明原因。從oracle跟蹤文件中找到死鎖錯誤的原因
*** 2013-06-25 09:37:35.324
DEADLOCK DETECTED (ORA-00060)
[Transaction Deadlock]
The following deadlock is not an ORACLE error. It is a deadlock due
to user error in the design of an application
or from issuing incorrect ad-hoc SQL. The following
information may aid in determining the deadlock:
Deadlock graph:
---------Blocker(s)-------- ---------Waiter(s)---------
Resource Name process session holds waits process session holds waits
TM-000151a2-00000000 210 72 SX SSX 208 24 SX SSX
TM-000151a2-00000000 208 24 SX SSX 210 72 SX SSX
session 72: DID 0001-00D2-000000C6 session 24: DID 0001-00D0-00000043
session 24: DID 0001-00D0-00000043 session 72: DID 0001-00D2-000000C6
Rows waited on:
Session 72: no row
Session 24: no row
----- Information for the OTHER waiting sessions -----
Session 24:
sid: 24 ser: 45245 audsid: 31660323 user: 90/USER
flags: (0x45) USR/- flags_idl: (0x1) BSY/-/-/-/-/-
flags2: (0x40009) -/-/INC
pid: 208 O/S info: user: zgrid, term: UNKNOWN, ospid: 2439
image: [email protected]
client details:
O/S info: user: , term: , ospid: 1234
machine: xyz.local program:
current SQL:
delete from EMPLOYEE where EMP_ID=:1
----- End of information for the OTHER waiting sessions -----
Information for THIS session:
----- Current SQL Statement for this session (sql_id=dyfg1wd8xa9qt) -----
delete from EMPLOYEE where EMP_ID=:1
===================================================
如果有人能告訴我「Deadlock graph ::」在說什麼,我將不勝感激。此外,部分等待的行表示沒有行。
我還在一些博客中看到跟蹤文件中的「sqltxt」部分可以提示原因。以下是我在該部分看到的查詢。
select /*+ all_rows */ count(1) from "USERS"."EMPLOYEE_SALARY" where EMPSAL_EMP_ID=:1
employee_salary表在EMPSAL_EMP_ID列上具有外鍵約束。
SQL提示說「all_rows」,那麼這是否表示從employee表中刪除記錄時此表獲取表級別鎖定?我目前在外鍵列上沒有索引。在這個列上添加索引有幫助嗎?
請注意,以防萬一需要更多信息。
感謝
Oracle中鎖定模式的一個很好的主題:http://www.soug.ch/fileadmin/user_upload/Newsletter/NL_public/NL_2013_1_Award_Article.pdf好像你錯過了USERS.EMPLOYEE_SALARY.EMPSAL_EMP_ID列的索引和外部約束'關於刪除級聯'。 – ThinkJet
它看起來像你有兩個會話試圖刪除同一行。 – haki