马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
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 等视图可以全面分析锁环境。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|