1、desc dba_lock
名称 是否为空? 类型
----------------------------------------------------------------- -------- -------------
SESSION_ID NUMBER
LOCK_TYPE VARCHAR2(26)
MODE_HELD VARCHAR2(40)
MODE_REQUESTED VARCHAR2(40)
LOCK_ID1 VARCHAR2(40)
LOCK_ID2 VARCHAR2(40)
LAST_CONVERT NUMBER
BLOCKING_OTHERS VARCHAR2(40)
2、字段说明
session_id:拥有这个锁的会话id
lock_type:锁的种类,如DML、Transaction
mode_held:已请求到的锁的模式,如Row-X(SX)、Row-S(SS)。在这一点上,比v$lock的lmode列(数字表示)更清楚。
mode_requested:正在请求的锁的模式,未获得,如果得到了就会显示在mode_held上。
lock_id1:参数。如果是DML锁,这个参数值是被锁的对象的object_id,如果是transaction锁,不知道是什么。
lock_id2:参数。如果是DML锁,好像是0。如果是transaction锁,好像是XIDSQN(可以查询v$transaction视图)。
last_convert:?
blocking_others:这个锁是否阻止了其他会话。
3、通过个这视图可以查询的东西
a、可以查询哪个对象被锁了
b、可以查询哪个会话锁住了什么东西
4、是否控制文件的视图(即可以在mount下查询)?
否。
5、例子。
6、疑问
a、会不会出现这种情况:一个会话已经获得了一个锁,但同时也在请求另一个锁,也就是dba_lock里的mode_held和mode_request都有值?
我的理解:应该可能,因为锁可以叠加的,如果会话a请求了一个SS锁,会话B还能请求一个SS锁,然后会话b再请求x锁时,应该就会出现这种情况。(已经证实)
b、时间点A时会话1获得了一个锁,然后会话2请求锁被block了,再然后会话3也请求锁被block,此时会话A提交了,那接下来是会话2获得锁呢还是会话3获得?
这和时间先后有关呢还是和请求的锁的模式有关?
我的理解:应该只和时间先后有关,否则大家都去请求高级别的锁了。(未经证实)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/385741/viewspace-545358/ ,如需转载,请注明出处,否则将追究法律责任。