【转载】V$LOCK 和 V$LOCKED_OBJECT 的区别

转自 http://blog.sina.com.cn/s/blog_62defbef0101pgvo.html

查询锁表都会用到V$LOCKV$LOCKED_OBJECT,但这两者不是相同的。我们先看看它们各自的主要字段:
1.v$lock
sid:  会话SID,通常与v$session关联。

type:锁类型,TM表示表锁或DML锁,TX表示行锁或事务锁,UL表示用户锁。我们主要关注TX和TM两种型的锁其它均为系统锁,会很快自动释放,不用关注。行锁不会单独存,行级锁之前需要先加表级共享锁。

lmode:会话保持的锁的模式。
          0=None;
  1=Null;
  2=Row-S (SS,行级共享锁,其他对象只能查询这些数据行);
        3=Row-X(SX,行级排它锁,在提交前不允许做DML操作);
  4=Share(共享锁);5=S/Row-X(SSX,共享行级排它锁);
  6=Exclusive(排它锁)

ID1,ID2: ID1,ID2的取值含义根据type的取值而有所不同,对于TM 锁ID1表示被锁定表的object_id可以和dba_objects视图关联取得具体表信息,ID2 值为0;对于TX锁ID1以十进制数值表示该事务所占用的回滚段号和事务槽slot number号,其组形式:0xRRRRSSSS,RRRR=RBS/UNDO NUMBER,SSSS=SLOT NUMBER,ID2以十进制数值表示环绕wrap的次数,即事务槽被重用的次数
    
2.V$LOCKED_OBJECT
  session_id:        会话id。通常与v$session关联。
  object_id:         被锁对象标识。通常与dba_objects关联。
  oracle_username:   登录oracle用户名。
  os_user_name:      电脑用户名如:Administrator
  locked_mode:       会话保持的锁的模式。   
三、两者的区别
1.V$LOCKED_OBJECT只能报发生等待的表级锁,不能报发生等待的行级锁。
注:这句话是网上别人说的,暂时未验证,需慎重考虑。但是从我遇到的问题来看,似乎是正确的。只是我的问题已经无法重现,也就失去了验证它的机会。
2.v$locked_object包含的是当前DB中被锁住的OBJECT,而v$lock不仅包含用户的,还包括系统被锁住的object,即: V$LOCK>v$locked_object


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值