您当前的位置: 首页 > 

【LOCK】V$LOCK视图中的ID1和ID2含义

发布时间:2016-11-16 11:36:07 ,浏览量:0

  在诊断有关锁等待这种数据库等常见故障的时候经常会用到V$LOCK视图,这个视图中的ID1和ID2的含义经常被提及。了解这两个字段的含义对理解V$LOCK视图很有意义。   本文简单对V$LOCK视图中的ID1和ID2含义进行描述和探索。 1.Oracle官方文档中的描述 参考链接:http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/dynviews_1147.htm#i1407629 其中只记录了如下两条模糊的信息: ID1     NUMBER     Lock identifier #1 (depends on type) ID2     NUMBER     Lock identifier #2 (depends on type) 这样的描述是不足够和充分的。我们要求甚解! 2.MOS中的描述 有关V$LOCK视图中的ID1和ID2的含义在MOS的29787.1中有以下描述,描述的比较清晰,供参考。 The meaning of ID1 and ID2 depend on the lock TYPE. --------------------------------------------------------------------------- Most Common Lock Types: ---------------------------------------------------------------------------   TYPE  Name                  ID1                     ID2   ~~~~  ~~~~                  ~~~                     ~~~   TX    Transaction   Decimal RBS & slot     Decimal WRAP number                      (0xRRRRSSSS  RRRR = RBS number, SSSS = slot)     A TX lock is requested in eXclusive mode if we are waiting on a ROW.     A SHARE mode request implies we are waiting some other resource held     by the TX (Eg: waiting for an ITL entry)   TM  Table Locks             Object id of table.     Always 0.   TS  Temp Segment            TS#                     Relative DBA   ST  Space Transaction       Only ONE enqueue.   UL  User Locks 3.实例说明TM表级锁时ID1和ID2的含义 以最常见的TM表级锁定为例,ID1表示被锁定的对象的OBJECT_ID,ID2此时为“0”。 1)模拟TM标记锁 (1)创建测试用表T sec@ora10g> create table t (x varchar2(8)); Table created. (2)向表T中插入一条数据 sec@ora10g> insert into t values('secooler'); 1 row created. 2)获取锁信息 当前会话的sid为140,为了避免查询到其他信息,这里进行限定。 sec@ora10g> select sid, type, id1, id2 from v$lock where sid=140;        SID TYPE                        ID1        ID2 ---------- -------------------- ---------- ----------        140 TM                        10981          0        140 TX                       655404        260 3)根据ID1的值定位操作的数据库对象信息 sec@ora10g> select OWNER,OBJECT_NAME,OBJECT_ID,OBJECT_TYPE from dba_objects where OBJECT_ID=10981; OWNER      OBJECT_NAME     OBJECT_ID OBJECT_TYPE ---------- -------------- ---------- ------------- SEC        T                   10981 TABLE OK,得以验证,这里10981对应数据库对象便是我们操作的表T。 4.实例说明TX事务锁时ID1和ID2的含义 当所类型为TX事务锁时ID1和ID2的含义如下: ID1对应视图V$TRANSACTION中的XIDUSN字段和XIDSLOT字段。其中ID1的高16位为XIDUSN,低16位为XIDSLOT。 ID2对应视图V$TRANSACTION中的XIDSQN字段。 1)仍然以上面的锁信息中的TX锁对应的记录为例进行说明。 摘录信息如下:        SID TYPE                        ID1        ID2 ---------- -------------------- ---------- ----------        140 TX                       655404        260 2)使用ID2的值“260”检索V$TRANSACTION视图 sec@ora10g> select XIDUSN,XIDSLOT,XIDSQN from V$TRANSACTION where XIDSQN=260;     XIDUSN    XIDSLOT     XIDSQN ---------- ---------- ----------         10         44        260 3)10和44对应到ID1的值“655404”的方法 10*2^16+44=655404 4)使用ID1的值计算得到XIDUSN和XIDSLOT方法 sec@ora10g> select trunc(655404/power(2,16)) XIDUSN from dual;     XIDUSN ----------         10 sec@ora10g> select bitand(655404,to_number('ffff','xxxx'))+0 XIDSLOT from dual;    XIDSLOT ----------         44 这便是他们之间既简单有复杂的关系。 5.小结   有关V$LOCK的应用请参考文章《【实验】【LOCK】“锁等待”模拟、诊断及处理方法》(http://space.itpub.net/519536/viewspace-605526)。   作为最常用的动态性能视图V$LOCK,它的每个字段都应该深入了解和探索。以便做到胸有成竹,事半功倍。 Good luck. secooler 11.04.24 -- The End --

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

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    108476博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0468s