[html]
view plain
copy
- Oracle Skip Locked
- Oracle 11g引入skip locked。
- Skip Locked 是在query select语句中跳过已经被其他正在执行的query select语句锁住的行,只执行能够获得锁的行。
- select for update如何查询大数量,那么其他session同时执行的select语句可能会等待锁超时而报下面这个错
- ORA-30006: resource busy; acquire with WAIT timeout expired
- 如果是不超时的case,那么会出现
- ORA-00054 resource busy and NOWAIT specified
- 比如session1执行下面语句:
- SELECT *
- FROM dept WHERE
- deptno = 10
- FOR UPDATE NOWAIT;
- 输出:
- DEPTNO DNAME LOC
- ---------- -------------- -------------
- 10 ACCOUNTING NEW YORK
- session2执行下面语句:
- 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
- 因为session1已经锁住10这一行,session2请求获得不到10这一行的锁,就报错了。
- 那么在session2我们可以使用skip locked
- SELECT * FROM dept
- WHERE deptno IN (10,20)
- FOR UPDATE SKIP LOCKED;
- 此时输出:
- DEPTNO DNAME LOC
- ---------- -------------- -------------
- 20 RESEARCH DALLAS
- SKIP LOCKED会跳过被锁住的行,只查询没有锁住的行。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31349667/viewspace-2123218/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31349667/viewspace-2123218/