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

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.xdnf.cn/news/8891.html

相关文章:

  • 二十七、面向对象底层逻辑-SpringMVC九大组件之HandlerAdapter接口设计
  • 鸿蒙仓颉开发语言实战教程:自定义tabbar
  • 2025.5.26 关于后续更新内容的通知
  • 深入解析Kafka核心参数:buffer_memory、linger_ms与batch_size的优化之道
  • 机器学习多分类逻辑回归和二分类神经网络实践
  • [运维][服务器][lightsail] Nginx反向代理实现端口映射:将80端口转发至本地5000端口
  • 【运维】OpenWrt 中禁用 ZeroTier IPv6 配置指南
  • 【后端高阶面经:缓存篇】37、高并发系统缓存性能优化:从本地到分布式的全链路设计
  • 【数据结构】--二叉树--堆(上)
  • 【C++11】特性详解
  • UE 5 C++设置物体位置和旋转,初始化虚幻引擎样条线、加载引用虚幻编辑器中的蓝图、设置虚幻编辑器中Actor大小
  • [yolov11改进系列]基于yolov11替换卷积神经网CNN为KANConv的python源码+训练源码
  • AI 集成
  • Python应用运算符初解
  • Python笔记:windows下编译python3.8.20
  • Ecography投稿细节记录
  • 【C++】string的模拟实现
  • MYSQL中的分库分表及产生的分布式问题
  • Spring AI 与 Python:AI 开发的新老势力对决与协作
  • Java核心知识点DAY03:全解析从基础到企业级开发实战
  • 线程池实战——数据库连接池
  • 工程师 - Worm Gear
  • [C++] 洛谷B3959(GESP2024三月四级)做题
  • Linux 下VS Code 的使用
  • 【Python Cookbook】迭代器与生成器(二)
  • Java文件操作:从“Hello World”到“Hello File”
  • 嵌入式知识篇---热熔胶
  • 22 程序控制语句详解:跳转控制(break、continue、goto)、死循环应用、程序控制编程实战
  • SQL进阶之旅 Day 3:索引基础与应用
  • conda 环境中opencv 报错以及其他报错