ITPub博客

首页 > 数据库 > Oracle > Oracle Skip Locked

Oracle Skip Locked

原创 Oracle 作者:amoyquantum 时间:2016-08-09 15:29:14 0 删除 编辑


[html] view plain copy
  1. Oracle Skip Locked  
  2.   
  3. Oracle 11g引入skip locked。  
  4. Skip Locked 是在query select语句中跳过已经被其他正在执行的query select语句锁住的行,只执行能够获得锁的行。  
  5.   
  6. select for update如何查询大数量,那么其他session同时执行的select语句可能会等待锁超时而报下面这个错  
  7.   
  8.     ORA-30006: resource busy; acquire with WAIT timeout expired  
  9.       
  10. 如果是不超时的case,那么会出现  
  11.   
  12.     ORA-00054 resource busy and NOWAIT specified  
  13.       
  14. 比如session1执行下面语句:  
  15.   
  16.     SELECT *  
  17.       FROM dept  WHERE  
  18.      deptno = 10  
  19.     FOR UPDATE NOWAIT;  
  20.       
  21. 输出:  
  22.   
  23.     DEPTNO     DNAME          LOC  
  24.     ---------- -------------- -------------  
  25.     10         ACCOUNTING     NEW YORK  
  26.       
  27. session2执行下面语句:  
  28.   
  29.     SELECT * FROM dept  
  30.      WHERE deptno IN (10,20)  
  31.     FOR UPDATE NOWAIT;  
  32.       
  33. 那么输出:  
  34.   
  35.     SELECT * FROM dept WHERE deptno IN (10,20)  
  36.     FOR UPDATE NOWAIT  
  37.     ERROR at line 1:  
  38.     ORA-00054: resource busy and acquire with NOWAIT specified  
  39.       
  40. 因为session1已经锁住10这一行,session2请求获得不到10这一行的锁,就报错了。  
  41.   
  42. 那么在session2我们可以使用skip locked  
  43.   
  44.     SELECT * FROM dept  
  45.      WHERE deptno IN (10,20)  
  46.     FOR UPDATE SKIP LOCKED;  
  47.       
  48. 此时输出:  
  49.   
  50.     DEPTNO     DNAME          LOC  
  51.     ---------- -------------- -------------  
  52.     20         RESEARCH       DALLAS  
  53.       
  54. SKIP LOCKED会跳过被锁住的行,只查询没有锁住的行。  

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31349667/viewspace-2123218/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2016-05-27

  • 博文量
    21
  • 访问量
    12706