eygle.com   eygle.com
eygle.com  
 

« 如何重建UNDO TABLESPACE | Blog首页 | CSDN的Blog,我们最需要什么? »

如何在其他Session跳过被锁定的记录

作者:eygle |【转载时请以超链接形式标明文章和作者信息及本声明
链接:
有人问到这样的问题:如果一个用户对记录加锁,如何使其他用户看不到这条记录。
此前并未注意到这样一个用法(需要8.1.7.4.16以上的版本支持):

[oracle@jumper oracle]$ sqlplus scott/tiger

SQL*Plus: Release 9.2.0.4.0 - Production on Fri Mar 4 11:59:46 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning option
JServer Release 9.2.0.4.0 - Production

SQL> select * from dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
        33 ORACLE         beijing
        35 Oracle         Beijing
        36 Oracle         Beijing
        37 Oracle         Beijing

8 rows selected.

SQL> select * from dept where  deptno =10 for update;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK

SQL> !
[oracle@jumper oracle]$ sqlplus scott/tiger

SQL*Plus: Release 9.2.0.4.0 - Production on Fri Mar 4 12:00:14 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning option
JServer Release 9.2.0.4.0 - Production

SQL> select * from dept for update skip locked;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
        33 ORACLE         beijing
        35 Oracle         Beijing
        36 Oracle         Beijing
        37 Oracle         Beijing

7 rows selected.

SQL> 

存此备忘。



历史上的今天...
      >> 2008-03-04文章:
             Oracle10g OCR及Voting Disk的备份
      >> 2007-03-04文章:
             姓氏、染色体与传统文化
------
这篇 【如何在其他Session跳过被锁定的记录】来自 eygle.com | CSDN网摘| del.icio.us|Google订阅 | 鲜果订阅 | 抓虾订阅

By eygle on 2005-03-04 21:40 | Comments (5) | Posted to FAQ | Edit |

相关文章 随机文章
  • 10g临时表空间组导致递归SQL高度解析案例
  • Oracle的SQL可以有多长?
  • 如何对时间进行简单加减运算
  • 并行查询并行度Degree与instances 设置
  • 关于PARALLEL_MAX_SERVERS参数的设置
  • EMC CX500再扩容量2T
    Oracle Express版本的数据库选件
    DBA警世录:where条件很重要
    华友世纪申请在纳斯达克上市 融资2亿美元
    中国同学录(5460)及5460的数据库
    搜索本站:

    留言 (5)

    以前我怎么没有想到使用skip locked.

    使用for update nowait 倒是可以确定对应的记录是否已经被锁^_^.

    Posted by: jametong at March 7, 2005 3:16 PM

    这应该是一个内部语法,没有在文档上说明的。
    Steve这里有一些介绍:

    http://www.ixora.com.au/q+a/0010/17094208.htm

    Posted by: eygle at March 7, 2005 3:22 PM

    我发现在oracle816也可使用这种语法. 昨天我还在想这个问题呢 :)

    Posted by: cgh_chen at September 17, 2005 1:37 PM

    oralce 10G 里 能这样使用吗?为什么我使用了没有效果?
    对了,中间SQL> !
    [oracle@jumper oracle]$ sqlplus scott/tiger
    这个是何用意啊?
    请您解答下,谢谢了。

    Posted by: bobo at August 25, 2008 2:50 PM

    select * from dept for update skip locked;
    显示的是未被锁住的记录;
    那么如何显示已经被锁住的记录呢?

    select * from dept for update locked 不行;
    莫非要用
    select * from dept where rowid
    not in (select rowid from dept for update skip locked)

    Posted by: qingyun at September 2, 2008 2:15 PM

    发表留言:



    Remember Me?
    (输入验证码后方可评论,谢谢支持)



    CopyRight © 2004~2010 eygle.com, All rights reserved.