暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

v$lock与v$locked_object区别

dblife 2020-10-10
2255

v$lock视图说明

type:锁的类型
1、TM表示表锁或DML锁,TX表示行锁或事务锁,UL表示用户锁。我们主要关注TX和TM两种型的锁,其它均为系统锁,会很快自动释放,不用关注。
2、TM 锁包括了SS 、 SX、 S 、X 等多种模式,在数据库中用 0 -6 来表示。不同的 SQL 操作产生不同类型的 TM锁。
3、当 Oracle执行 DML 语句时,系统自动在所要操作的表上申请 TM 类型的锁。当 TM锁获得后,系统再自动申请 TX 类型的锁,并将实际锁定的数据行的锁标志位进行置位。
4、ID1,ID2:  ID1,ID2的取值含义根据type的取值而有所不同。
(1)对于TM 锁ID1表示被锁定表的object_id 可以和dba_objects视图关联取得具体表信息,ID2 值为0;
(2)对于TX 锁ID1以十进制数值表示该事务所占用的回滚段号和事务槽slot number号,其组形式: 0xRRRRSSSS,RRRR=RBS/UNDO NUMBER,SSSS=SLOT NUMBER,ID2 以十进制数值表示环绕wrap的次数,即事务槽被重用的次数。实际上这两个字段构成了事务在回滚段中的位置。

实验验证

两个session分别更新同一个表的同一字段记录
1、session1
test@FOSDB>update tname set id=3 where id=1;
已更新 1 行.
2、session2 test@FOSDB>update tname set id=3 where id=1; -->>> 阻塞
3、session3上图中有两个会话sid分别为400和1160,1160的block=1,说明1160的session拥有一个锁,并且阻塞了其他session的对该锁的请求。
session 400的request=6说明该session正在等待一个lmode为6的锁,而该锁的拥有者正是1160的session。
对于TM锁,ID1值就是加锁的段的对象,可以是表或者表分区,此时ID2一般为0;对于TX锁,这两个字段构成该事务在回滚段中的位置。

结论

从两个视图的查询结果看,视图vlocked_object只是包含了TM锁的记录,也就是说v$locked_object不包含行锁信息。


文章转载自dblife,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论