当前位置: 首页 > article >正文

Oracle 的V$LOCK 视图详解

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. 查看所有锁信息

SELECT * FROM v$lock ORDER BY ctime DESC;

2. 查找阻塞会话

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;

3. 查询特定对象的锁

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. 常见锁问题

  • TX锁等待:最常见的事务冲突
  • TM锁冲突:DDL与DML操作冲突
  • 死锁:ORA-00060错误

2. 解锁方法

-- 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 等视图可以全面分析锁情况。

http://www.lryc.cn/news/2395256.html

相关文章:

  • 秒杀系统—1.架构设计和方案简介
  • 基于FashionMnist数据集的自监督学习(生成式自监督学习AE算法)
  • 从监控到告警:Prometheus+Grafana+Alertmanager+告警通知服务全链路落地实践
  • AUTOSAR图解==>AUTOSAR_EXP_AIADASAndVMC
  • WPF【09】WPF基础入门 (三层架构与MVC架构)
  • macOS 风格番茄计时器:设计与实现详解
  • 中文NLP with fastai - Fastai Part4
  • oracle goldengate实现远程抽取postgresql 到 postgresql的实时同步【绝对无坑版,亲测流程验证】
  • 【MYSQL】索引篇(一)
  • ISCC-2025-web-wp
  • 鸿蒙分辨率
  • @Docker Compose 部署 Pushgateway
  • 我们来学mysql -- 从库重启,是否同步主库数据
  • King3399(ubuntu文件系统)iic(i2c)功能测试
  • 德思特新闻 | 德思特与es:saar正式建立合作伙伴关系
  • 基于原生JavaScript前端和 Flask 后端的Todo 应用
  • 一些Dify聊天系统组件流程图架构图
  • jq处理日志数据
  • Matlab程序设计基础
  • MIT 6.S081 2020 Lab6 Copy-on-Write Fork for xv6 个人全流程
  • 第304个Vulnhub靶场演练攻略:digital world.local:FALL
  • Unity 模拟高度尺系统开发详解——实现拖动、范围限制、碰撞吸附与本地坐标轴选择
  • 万字详解RTR RTSP SDP RTCP
  • 云服务器如何自动更新系统并保持安全?
  • 训练中常见的运动强度分类
  • java 递归地复制文件夹及其所有子文件夹和文件
  • [paddle]paddle2onnx无法转换Paddle3.0.0的json格式paddle inference模型
  • React项目在ios和安卓端要做一个渐变色背景,用css不支持,可使用react-native-linear-gradient
  • 【数据分析】特征工程-特征选择
  • 第4节 Node.js NPM 使用介绍