V$LOCK视图中的ID1和ID2含义 测试

原文转自:http://space.itpub.net/519536/viewspace-693689 

在诊断有关锁等待这种数据库等常见故障的时候经常会用到V$LOCK视图,这个视图中的ID1ID2含义经常被提及。了解这两个字段的含义对理解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字段(Undo
segment number:事务对应的撤销段序列号)和XIDSLOT字段(Slot number:事务对应的槽位号)。其中ID1的高16位为XIDUSN,低16位为XIDSLOT。

ID2对应视图V$TRANSACTION中的XIDSQN字段(Sequence
number:事务对应的序列号)。

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,它的每个字段都应该深入了解和探索。以便做到胸有成竹,事半功倍。

更多讨论:http://www.itpub.net/thread-973766-1-1.html

-- The End --

时间: 2024-09-21 16:32:40

V$LOCK视图中的ID1和ID2含义 测试的相关文章

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

  在诊断有关锁等待这种数据库等常见故障的时候经常会用到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

sql-如何用SQL语句查询Table表中的ID1中的O1,O2,O3为1 的数目

问题描述 如何用SQL语句查询Table表中的ID1中的O1,O2,O3为1 的数目 如何用SQL语句查询Table表中的ID1中的O1,O2,O3为1 的数目 Table ID O1 O2 O3 ID1 1 1 0 ID2 1 0 1 ID3 0 1 1 解决方案 select COUNT(*), (select COUNT(*) FROM a where O1='1') AS COUNTO1,(SELECT COUNT(*) FROM A WHERE O2="1") AS COUN

MFC框架下 单文档视图中多视图切换问题

问题描述 MFC框架下 单文档视图中多视图切换问题 在MainFrm.cpp 里对主视图进行了切分 BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs CCreateContext* pContext){ // TODO: Add your specialized code here and/or call the base class // CRect rc; // 获取框架窗口客户区的CRect对象 GetClientRect(&rc);

在视图中使用ORDER BY子句

视图 问:为什么SQL Server不允许在视图定义使用ORDER BY子句? 答: SQL Server之所以不允许在视图定义中使用ORDER BY子句是为了遵守ANSI SQL-92标准.因为对该标准的原理分析需要对结构化查询语言(SQL)的底层结构和它所基于的数学理论进行讨论,我们不能在这里对它进行充分的解释.但是,如果你需要在视图中指定ORDER BY子句,可以考虑使用以下方法: USE pubsGO CREATE VIEW AuthorsByNameASSELECT TOP 100 P

在设计视图中Access允许的九种数据类型

在表的设计视图中,每一个字段都有设计类型,Access允许九种数据类型:文本.备注.数值.日期/时间.货币.自动编号.是/否.OLE对象.超级链接.查询向导. 文本:这种类型允许最大255个字符或数字,Access默认的大小是50个字符,而且系统只保存输入到字段中的字符,而不保存文本字段中未用位置上的空字符.可以设置"字段大小"属性控制可输入的最大字符长度. 备注: 这种类型用来保存长度较长的文本及数字,它允许字段能够存储长达64000个字符的内容.但Access不能对备注字段进行排序

如何在Word 2013页面视图中显示背景色

在设置了背景色的Word2013文档中,用户可以根据需要显示页面背景色,操作步骤如下所述: 第1步,打开Word2013文档窗口,依次单击"文件"→"选项"按钮,如图2013072505所示. 图2013072505 单击"选项"按钮 第2步,打开"Word选项"对话框,切换到"高级"选项卡.在"显示文档内容"区域选中"在页面视图中显示背景色和图像"复选框,并单击&q

如何在Word 2013文档大纲视图中显示样式

在Word2013文档中,如果用户希望能够在大纲视图中显示每个段落所应用的样式,则可以按照如下步骤进行操作: 第1步,打开Word2013文档窗口,依次单击"文件"→"选项"按钮,如图2013081017所示. 图2013081017 单击"选项"按钮 第2步,在打开的"Word选项"对话框中切换到"高级"选项卡,在"显示"区域中,将"草稿和大纲视图中的样式区窗格宽度"

如何在Word 2013草稿和大纲视图中使用草稿字体

在Word2013文档中,用户可以设置一种字体作为草稿字体.当启用"在草稿和大纲视图中使用草稿字体"功能后,则草稿和大纲视图中的Word文档内容将只以草稿字体显示,而不再显示其他字体效果.具体设置步骤如下所述: 第1步,打开Word2013文档窗口,依次单击"文件"→"选项"按钮,如图2013072526所示. 图2013072526 单击"选项"按钮 第2步,打开"Word选项"对话框,切换到"

在Word 2007的草稿和大纲视图中使用草稿字体

在Word2007文档中,用户可以设置一种字体作为草稿字体.当启用"在草稿和 大纲视图中使用草稿字体"功能后,则草稿和大纲视图中的Word文档内容将只以 草稿字体显示,而不再显示其他字体效果.具体设置步骤如下所述: 第1 步,打开Word2007文档窗口,依次单击"Office按钮"→"Word选项"按钮,如 图2012040436所示. 图2012040436 单击"Word选项"按钮 第2步,打开" Word选项