Oracle開(kāi)發(fā)技術(shù):OracleSkipLocked
Oracle開(kāi)發(fā)技術(shù):OracleSkipLocked
Oracle Skip Locked
[html]
Oracle Skip Locked
Oracle 11g引入skip locked。
Skip Locked 是在query select語(yǔ)句中跳過(guò)已經(jīng)被其他正在執(zhí)行的query select語(yǔ)句鎖住的行,只執(zhí)行能夠獲得鎖的行。
select for update如何查詢大數(shù)量,那么其他session同時(shí)執(zhí)行的select語(yǔ)句可能會(huì)等待鎖超時(shí)而報(bào)下面這個(gè)錯(cuò)
ORA-30006: resource busy; acquire with WAIT timeout expired
如果是不超時(shí)的case,那么會(huì)出現(xiàn)
ORA-00054 resource busy and NOWAIT specified
比如session1執(zhí)行下面語(yǔ)句:
SELECT *
FROM dept WHERE
deptno = 10
FOR UPDATE NOWAIT;
輸出:
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
session2執(zhí)行下面語(yǔ)句:
SELECT * FROM dept
WHERE deptno IN (10,20)
FOR UPDATE NOWAIT;
那么輸出:
SELECT * FROM dept WHERE deptno IN (10,20)
FOR UPDATE NOWAIT
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified
因?yàn)閟ession1已經(jīng)鎖住10這一行,session2請(qǐng)求獲得不到10這一行的鎖,就報(bào)錯(cuò)了。
那么在session2我們可以使用skip locked
SELECT * FROM dept
WHERE deptno IN (10,20)
FOR UPDATE SKIP LOCKED;
此時(shí)輸出:
DEPTNO DNAME LOC
---------- -------------- -------------
20 RESEARCH DALLAS
SKIP LOCKED會(huì)跳過(guò)被鎖住的行,只查詢沒(méi)有鎖住的行。