我被困在一種情況下,我正在使用FOR UPDATE SKIP LOCKED的select語句。 下面查詢是一個正被從在RAC環境中運行多個並行Jjobs調用的過程的一部分:FOR UPDATE SKIP LOCKED鎖定表不在select語句中使用Oracle
CURSOR MyCursor IS
SELECT A.ID, A.NEXTSEQNBR, A.EVENTTYPCD, A.EVMEVENTID , B.EVENTTTIMESTAMP
FROM Table1 A
INNER JOIN Table2 B ON A.ID = B.ID
AND A.NEXTSEQNBR - 1 = B.SEQNBR
WHERE B.STATCD = 'MYVAL'
AND MOD(A.ID, 1) = 0
FOR UPDATE SKIP LOCKED;
表1有一個名爲EVENTTYPTABLE1主表。 Table1.EVENTTYPCD列是引用EVENTTYPTABLE1的外鍵。
在生產環境中,我正在檢查鎖定的對象,發現主表EVENTTYPTABLE1被鎖定,即使我在上述查詢中沒有使用主表EVENTTYPTABLE1。由於FOR UPDATE SKIP LOCKED,我期待Table1和Table2表處於鎖定狀態。但爲什麼EVENTTYPTABLE1?我錯過了什麼?
當然光標在過程中被打開和提取。
我現在不是在Oracle實例的前面更完整地回答。但是,從Oracle 11.1.0.6開始,針對子表的DML在父表上採用了「SX」模式的DML鎖。請參閱Oracle支持筆記5909305.8。 –
請分享您所指的點的鏈接。 –
我無法分享鏈接 - 支持說明只能通過Oracle支持網站訪問。您的Oracle許可證應授權您在那裏註冊。 –