Oracle 的V$LOCK 视图详解

[复制链接]
发表于 2025-5-27 22:09:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
Oracle 的V$LOCK 视图详解

V$LOCK 是 Oracle 数据库中最紧张的动态性能视图之一,用于表现当前数据库中锁的持有和等待环境。
一、V$LOCK 视图布局

列名数据类型描述SIDNUMBER持有或等待锁的会话标识符TYPEVARCHAR2(2)锁类型标识符ID1NUMBER锁标识符1(寄义取决于锁类型)ID2NUMBER锁标识符2(寄义取决于锁类型)LMODENUMBER锁模式(当前持有的模式)REQUESTNUMBER哀求的锁模式CTIMENUMBER锁已持有或等待的时间(秒)BLOCKNUMBER是否阻塞其他会话(1=阻塞,0=不阻塞) 二、重要锁类型(TYPE字段)

1. 基本锁类型

类型描述TX事务锁(行级锁)TMDML锁(表级锁)UL用户自界说锁(DBMS_LOCK创建) 2. 系统级锁类型

类型描述ST空间事务锁TT临时表锁SQ序列锁CF控制文件锁 三、锁模式(LMODE/REQUEST)

Oracle 锁模式数值界说:
值锁模式描述0None无锁1Null (N)空模式2Row-S (SS)行共享3Row-X (SX)行排他4Share (S)共享5S/Row-X (SSX)共享行排他6Exclusive (X)排他 四、ID1 和 ID2 的寄义

1. TX 锁(事务锁)



  • ID1:Undo 段号 + 事务槽号(USN.SLT)
  • ID2:事务序列号(WRAP)
2. TM 锁(表锁)



  • ID1:被锁定对象的 OBJECT_ID
  • ID2:通常为 0
3. UL 锁(用户锁)



  • ID1:DBMS_LOCK.ALLOCATE_UNIQUE 分配的锁ID
  • ID2:通常为 0
五、实用查询示例

1. 查看全部锁信息

  1. SELECT * FROM v$lock ORDER BY ctime DESC;
复制代码
2. 查找阻塞会话

  1. SELECT
  2.   l1.sid AS "阻塞会话ID",
  3.   s1.username AS "阻塞用户",
  4.   s1.osuser AS "阻塞OS用户",
  5.   s1.machine AS "阻塞机器",
  6.   l2.sid AS "被阻塞会话ID",
  7.   s2.username AS "被阻塞用户",
  8.   l1.type AS "锁类型",
  9.   DECODE(l1.type,
  10.     'TX', '事务锁',
  11.     'TM', '表锁',
  12.     'UL', '用户锁',
  13.     l1.type) AS "锁描述",
  14.   l1.ctime AS "持有时间(秒)"
  15. FROM v$lock l1, v$lock l2, v$session s1, v$session s2
  16. WHERE l1.block = 1
  17. AND l2.request > 0
  18. AND l1.id1 = l2.id1
  19. AND l1.id2 = l2.id2
  20. AND l1.sid = s1.sid
  21. AND l2.sid = s2.sid;
复制代码
3. 查询特定对象的锁

  1. SELECT l.sid, s.username, s.status, l.type, l.lmode, l.ctime, o.object_name
  2. FROM v$lock l, dba_objects o, v$session s
  3. WHERE l.id1 = o.object_id(+)
  4. AND l.type = 'TM'
  5. AND l.sid = s.sid
  6. AND o.object_name = 'EMPLOYEES';
复制代码
六、锁诊断与问题解决

1. 常见锁问题



  • TX锁等待:最常见的事务冲突
  • TM锁冲突:DDL与DML利用冲突
  • 死锁:ORA-00060错误
2. 解锁方法

  1. -- 1. 查找阻塞会话
  2. SELECT sid, serial#, username FROM v$session
  3. WHERE sid IN (SELECT blocking_session FROM v$session WHERE blocking_session IS NOT NULL);
  4. -- 2. 终止会话
  5. ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
复制代码
V$LOCK 视图是诊断 Oracle 锁问题的关键工具,联合 V$SESSION 和 V$LOCKED_OBJECT 等视图可以全面分析锁环境。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

快速回复 返回顶部 返回列表