在
oracle v$lock视图中,下面对type,ID1,ID2三个列的具体含义说明下:
TYPE 有TM,TX两种类型,TX为行级锁,事物锁,TM锁为表级锁
|
TYPE |
ID1 |
ID2 |
|
TM |
被修改表的标识(object_id) |
0 |
|
TX |
以十进制数值表示该事务所占用的回滚段号与该事务在该回滚段的事务表(Transaction table)中所占用的槽号(slot number,可理解为记录号)。其组成形式为:0xRRRRSSSS ( RRRR = RBS number, SSSS = slot )。 |
以十进制数值表示环绕(wrap)次数,即该槽(slot)被重用的次数; |
当type为TM时,6718为对象ID号
SQL> select type,id1,id2 from v$lock where sid in (16,17);
TYPE ID1 ID2
%Q3BwL6|BD0---- ---------- ----------ITPUB个人空间]s6d5xo'V
TX 65572 56
A6?Vw Y0TM 6718 0ITPUB个人空间(]\PR+uR
TM 6718 0ITPUB个人空间W [f t,s1oF
TX 65572 56
SQL> select object_id from DBA_OBJECTS WHERE WNER='SYS' and object_name='TEST';
OBJECT_IDITPUB个人空间[9a(\9p{}2` Ok1i
----------ITPUB个人空间D| ~L]
6718
SQL>
当type为TX时,65572通过以下换算方式得到回滚段号和回滚段所占用的事物槽号
Us5Yw8[(G nr0
SQL> select xidusn,xidslot from v$transaction;
XIDUSN XIDSLOTITPUB个人空间T o%{iR/p
---------- ----------
LtFyM2~0 1 36
SQL> select trunc(65572/65536),mod(65572,65536) from dual;
TRUNC(65572/65536) MOD(65572,65536)
\-sX/|']0------------------ ----------------
8i/^t ]p8[-v8d#K1e'K0 1 36
---------------以上是转别人的-----------------------------
SQL> select a.*,b.object_name,b.subobject_name from gv$lock a,
2 dba_objects b where a.type = 'TM' and a.id1 = b.object_id and b.object_name = 'TMH_FT_USER_INFO_WIDE_T'
3 ;
INST_ID ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK OBJECT_NAME SUBOBJECT_NAME
---------- ---------------- ---------------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ---------- -------------------------------------------------------------------------------- ------------------------------
1 00007F3EC57E0528 00007F3EC57E0588 778 TM 332241 0 3 0 1320 2 TMH_FT_USER_INFO_WIDE_T P20120703_P0
2 00007F6E120CC528 00007F6E120CC588 1094 TM 332312 0 3 0 1365 2 TMH_FT_USER_INFO_WIDE_T P20120703_P1
6 00007F11943A7560 00007F11943A75C0 646 TM 332313 0 3 0 1350 2 TMH_FT_USER_INFO_WIDE_T P20120703_P2
4 00007FF41DB06528 00007FF41DB06588 264 TM 332314 0 3 0 1341 2 TMH_FT_USER_INFO_WIDE_T P20120703_P3
3 00007FCDBF64C528 00007FCDBF64C588 1159 TM 332315 0 3 0 1378 2 TMH_FT_USER_INFO_WIDE_T P20120703_P4
2 00007F6E120CC528 00007F6E120CC588 515 TM 332316 0 3 0 1390 2 TMH_FT_USER_INFO_WIDE_T P20120703_P5
6 00007F11943A7560 00007F11943A75C0 1350 TM 332317 0 3 0 1356 2 TMH_FT_USER_INFO_WIDE_T P20120703_P6
3 00007FCDBF64C528 00007FCDBF64C588 1349 TM 332318 0 3 0 1377 2 TMH_FT_USER_INFO_WIDE_T P20120703_P7
4 00007FF41DB06528 00007FF41DB06588 68 TM 332319 0 3 0 1339 2 TMH_FT_USER_INFO_WIDE_T P20120703_P8
3 00007FCDBF64C528 00007FCDBF64C588 201 TM 332320 0 3 0 1381 2 TMH_FT_USER_INFO_WIDE_T P20120703_P9
4 00007FF41DB06528 00007FF41DB06588 68 TM 170152 0 3 0 1673 2 TMH_FT_USER_INFO_WIDE_T
4 00007FF41DB06528 00007FF41DB06588 264 TM 170152 0 3 0 1673 2 TMH_FT_USER_INFO_WIDE_T
2 00007F6E120CC528 00007F6E120CC588 1094 TM 170152 0 3 0 1673 2 TMH_FT_USER_INFO_WIDE_T
2 00007F6E120CC528 00007F6E120CC588 515 TM 170152 0 3 0 1673 2 TMH_FT_USER_INFO_WIDE_T
1 00007F3EC57E0528 00007F3EC57E0588 778 TM 170152 0 3 0 1673 2 TMH_FT_USER_INFO_WIDE_T
6 00007F11943A7560 00007F11943A75C0 1350 TM 170152 0 3 0 1673 2 TMH_FT_USER_INFO_WIDE_T
6 00007F11943A7560 00007F11943A75C0 646 TM 170152 0 3 0 1673 2 TMH_FT_USER_INFO_WIDE_T
3 00007FCDBF64C528 00007FCDBF64C588 1349 TM 170152 0 3 0 1673 2 TMH_FT_USER_INFO_WIDE_T
3 00007FCDBF64C528 00007FCDBF64C588 201 TM 170152 0 3 0 1673 2 TMH_FT_USER_INFO_WIDE_T
3 00007FCDBF64C528 00007FCDBF64C588 1159 TM 170152 0 3 0 1673 2 TMH_FT_USER_INFO_WIDE_T
20 rows selected
SQL>
通过以上查询可以知道哪些实例在执行表TMH_FT_USER_INFO_WIDE_T操作;subobject_name 为空的情况是对分区表子分区操作,就会对他的上层加一个TM锁。。该表是个list_list分区,为什么对他的上层分区P20120703没有上锁?
ctime 的单位为秒。
---
gv$db_object_cache 也可以知道某个过程在那几个实例上运行
select * from gv$db_object_cache where name = 'SP_TMH_FT_USER_INFO_WIDE_T';
某个存储过程在运行的时候,我们去编译这个过程就会卡住,只到该过程执行完成,配合gv$access 可以知道运行该过程的实例和sid ,就可以杀到正在运行的过程。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27212634/viewspace-742628/
,如需转载,请注明出处,否则将追究法律责任。