精易论坛

标题: Oracle Skip Locked [打印本页]

作者: ㄣ负二代    时间: 2013-6-15 19:38
标题: Oracle Skip Locked
Oracle Skip Locked  [html]
  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会跳过被锁住的行,只查询没有锁住的行。


作者: 淡入淡出    时间: 2013-6-15 19:40
我表示看不懂   远观就好
作者: 宇智波·佐助    时间: 2013-6-23 17:14
看看               




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4