Oracle Skip Locked

原文链接:http://www.javaarch.net/jiagoushi/704.htm

 

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会跳过被锁住的行,只查询没有锁住的行。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值