点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!


Enqueue(队列)是一种共享内存结构,用于串行访问数据库资源,关联一个会话或事务,它是Oracle访问数据库对象的lock,每个试图锁住资源的会话,将会获得这个资源的Enqueue。
01
02
TM锁称为表级锁; TX锁称为事务锁或行级锁; UL是用户使用DBMS_LOCK包自定义的锁。
CF(Controlfile Enqueue)
DX (Distributed Transaction Enqueue)
FB (Block Format Enqueue)
HW( High Water Enqueue)
JS (Job Scheduler Enqueue)
RO (Fast Object Reuse Enqueue)
SQ( Sequence Cache Enqueue)
ST( Space Transaction Enqueue)
TO( Temporary Table Object Enqueue)
TT (Tablespace Operations Enqueue)
US( Undo Segment Enqueue)等等
LOCK: TX "Transaction Enqueue".
enq: TX - contention
enq: TX - row lock contention
enq: TX - allocate ITL entry
enq: TX - index contention

update u1.test1 set name='MM' where id=5
复制
update u1.test1 set name='zz' where id=5
复制
SELECT sid,type,id1,id2,lmode,request FROM v$lock WHERE type='TX';
复制
SID TYPE ID1 ID2 LMODE REQUEST
52 TX 524288 13106 6 0
59 TX 524288 13106 0 6复制
03
SELECT DECODE(request,0,'Holder: ','Waiter: ')||sid sess,
id1, id2, lmode, request, type
FROM V$LOCK
WHERE (id1, id2, type) IN
(SELECT id1, id2, type FROM V$LOCK WHERE request>0)
ORDER BY id1, request复制
SESS ID1 ID2 LMODE REQUEST TYPE
Holder: 52 524288 13106 6 0 TX
Waiter: 59 524288 13106 0 6 TX复制
SID:52是blocker,正持有该锁;
SID:59是waiter,等待获得该锁.
SELECT DECODE(LV, 1, 'Holder: ' || S.SID, 'Waiter: ' || S.SID) SESS_STATUS,S.USERNAME,OBJECT_NAME,S.inst_id,S.SID,s.serial#, DECODE(L.LMODE, 0, 'None', 1, 'Null', 2, 'Row-S (SS)', 3, 'Row-X (SX)', 4, 'Share', 5, 'S/Row-X (SSX)', 6, 'Exclusive', TO_CHAR(L.LMODE)) LOCK_MODE, TRUNC(L.CTIME 3600) || ':' || TRUNC(MOD(L.CTIME, 3600) 60) || ':' || MOD(L.CTIME, 60) CTIME, S.STATUS, S.MACHINE, S.SQL_ID, Q.SQL_TEXT
FROM (SELECT /*+ NO_MERGE */(3-LEVEL) LV, INST_ID, SID, TYPE, LMODE, CTIME
FROM (SELECT /*+ NO_MERGE */A.INST_ID, A.SID, A.TYPE, A.LMODE, A.REQUEST,
CASE
WHEN REQUEST = 0 THEN ID1
END ID1,
CASE
WHEN REQUEST > 0 THEN ID1
END ID3,
A.CTIME
FROM GV$LOCK A
WHERE A.TYPE <> 'MR') START WITH REQUEST > 0 CONNECT BY PRIOR ID3 = ID1 ) L,
GV$SESSION S,
GV$PROCESS P,
dba_objects O,
GV$SQL Q
WHERE L.SID = S.SID
AND L.INST_ID = S.INST_ID
AND S.INST_ID = P.INST_ID(+)
AND S.PADDR = P.ADDR(+)
AND S.ROW_WAIT_OBJ# = O.OBJECT_ID(+)
AND S.SQL_ID = Q.SQL_ID(+)
GROUP BY DECODE(LV, 1, 'Holder: ' || S.SID, 'Waiter: ' || S.SID), S.INST_ID,S.SID,s.serial#, S.USERNAME, O.OBJECT_NAME, L.TYPE, L.LMODE, L.CTIME, S.STATUS, S.MACHINE,S.SQL_ID,Q.SQL_TEXT;复制
SESS_STATUS USERNAME OBJECT_NAME INST_ID SID SERIAL# LOCK_MODE CTIME STATUS MACHINE SQL_ID SQL_TEXT
Holder: 52 U1 1 52 54450 Exclusive 0:34:15 INACTIVE WORKGROUP\DREAM
Waiter: 59 U1 TEST1 1 59 50489 None 0:34:6 ACTIVE WORKGROUP\DREAM 2btf137sycbdh update u1.test1 set name='zz' where id=5复制
select decode(request,0,'Holder','Waiter') req ,s.inst_id , s.sid, s.serial#,p.spid,s.status, id1, id2, lmode, request, l.type, ctime, s.sql_id, s.event#,s.event,s.last_call_et
from gv$lock l
join gv$session s on l.sid=s.sid and l.inst_id=s.inst_id
join gv$process p on s.paddr=p.addr and p.inst_id=s.inst_id
where (id1, id2, l.type) in
(select id1, id2, type from gv$lock where request>0 )
order by id1, ctime desc, request;复制


本文作者:谈龙凤
本文来源:IT那活儿(上海新炬王翦团队)
文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
548次阅读
2025-04-15 17:24:06
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
469次阅读
2025-04-18 14:18:38
Oracle SQL 执行计划分析与优化指南
Digital Observer
446次阅读
2025-04-01 11:08:44
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
445次阅读
2025-04-08 09:12:48
墨天轮个人数说知识点合集
JiekeXu
443次阅读
2025-04-01 15:56:03
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
438次阅读
2025-04-22 00:20:37
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
414次阅读
2025-04-22 00:13:51
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
411次阅读
2025-04-20 10:07:02
Oracle 19c RAC更换IP实战,运维必看!
szrsu
393次阅读
2025-04-08 23:57:08
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
358次阅读
2025-04-17 17:02:24