31人参与 • 2025-06-15 • Oracle
v$lock 是 oracle 数据库中最重要的动态性能视图之一,用于显示当前数据库中锁的持有和等待情况。
列名 | 数据类型 | 描述 |
---|---|---|
sid | number | 持有或等待锁的会话标识符 |
type | varchar2(2) | 锁类型标识符 |
id1 | number | 锁标识符1(含义取决于锁类型) |
id2 | number | 锁标识符2(含义取决于锁类型) |
lmode | number | 锁模式(当前持有的模式) |
request | number | 请求的锁模式 |
ctime | number | 锁已持有或等待的时间(秒) |
block | number | 是否阻塞其他会话(1=阻塞,0=不阻塞) |
类型 | 描述 |
---|---|
tx | 事务锁(行级锁) |
tm | dml锁(表级锁) |
ul | 用户自定义锁(dbms_lock创建) |
类型 | 描述 |
---|---|
st | 空间事务锁 |
tt | 临时表锁 |
sq | 序列锁 |
cf | 控制文件锁 |
oracle 锁模式数值定义:
值 | 锁模式 | 描述 |
---|---|---|
0 | none | 无锁 |
1 | null (n) | 空模式 |
2 | row-s (ss) | 行共享 |
3 | row-x (sx) | 行排他 |
4 | share (s) | 共享 |
5 | s/row-x (ssx) | 共享行排他 |
6 | exclusive (x) | 排他 |
select * from v$lock order by ctime desc;
select l1.sid as "阻塞会话id", s1.username as "阻塞用户", s1.osuser as "阻塞os用户", s1.machine as "阻塞机器", l2.sid as "被阻塞会话id", s2.username as "被阻塞用户", l1.type as "锁类型", decode(l1.type, 'tx', '事务锁', 'tm', '表锁', 'ul', '用户锁', l1.type) as "锁描述", l1.ctime as "持有时间(秒)" from v$lock l1, v$lock l2, v$session s1, v$session s2 where l1.block = 1 and l2.request > 0 and l1.id1 = l2.id1 and l1.id2 = l2.id2 and l1.sid = s1.sid and l2.sid = s2.sid;
select l.sid, s.username, s.status, l.type, l.lmode, l.ctime, o.object_name from v$lock l, dba_objects o, v$session s where l.id1 = o.object_id(+) and l.type = 'tm' and l.sid = s.sid and o.object_name = 'employees';
-- 1. 查找阻塞会话 select sid, serial#, username from v$session where sid in (select blocking_session from v$session where blocking_session is not null); -- 2. 终止会话 alter system kill session 'sid,serial#' immediate;
v$lock 视图是诊断 oracle 锁问题的关键工具,结合 v$session 和 v$locked_object 等视图可以全面分析锁情况。
到此这篇关于oracle中v$lock 视图的使用小结的文章就介绍到这了,更多相关oracle v$lock 视图内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论