使用DBMS_ROWID获取被阻塞行的rowid
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,在使用v$session视图在查询会话的行锁的等待事件时,视图中提供了会话等待的对象号(ROW_WAIT_OBJ#)、文件号(ROW_WAIT_FILE#)、块号(ROW_WAIT_BLOCK#)和行
千家信息网最后更新 2025年11月07日使用DBMS_ROWID获取被阻塞行的rowid
在使用v$session视图在查询会话的行锁的等待事件时,视图中提供了会话等待的对象号(ROW_WAIT_OBJ#)、文件号(ROW_WAIT_FILE#)、块号(ROW_WAIT_BLOCK#)和行号(ROW_WAIT_ROW#)但是如何使用这些信息定位出会话等待的是哪一行呢?答案就是使用DBMS_ROWID
打开两个会话同时更新同一条数据
#session 1zx@ORCL>select distinct sid from v$mystat; SID---------- 22zx@ORCL>zx@ORCL>update zx set name='zx' where id=1;1 row updated.#session 2zx@ORCL>select distinct sid from v$mystat; SID---------- 145 zx@ORCL>update zx set name='zx' where id=1;
此时session2会被session1阻塞,查询v$session会话145在等待enq: TX - row lock contention
zx@ORCL>col event for a40zx@ORCL>select SID,EVENT,ROW_WAIT_OBJ#,ROW_WAIT_FILE#,ROW_WAIT_BLOCK#,ROW_WAIT_ROW# from v$session where sid=145; SID EVENT ROW_WAIT_OBJ# ROW_WAIT_FILE# ROW_WAIT_BLOCK# ROW_WAIT_ROW#---------- ---------------------------------------- ------------- -------------- --------------- ------------- 145 enq: TX - row lock contention 99754 18 15571 7
查询v$lock确认会话145在请求会话22的TX锁
zx@ORCL>select sid,type,id1,id2,lmode,request from v$lock where sid=145 or sid=22 order by 1; SID TYPE ID1 ID2 LMODE REQUEST---------- ------ ---------- ---------- ---------- ---------- 22 AE 100 0 4 0 22 TM 99754 0 3 0 22 TX 4390915 581 6 0 145 TM 99754 0 3 0 145 TX 4390915 581 0 6 145 AE 100 0 4 0
使用如下语句查询会话145等待哪个表的哪个行
zx@ORCL>col owner for a10zx@ORCL>col object_name for a10zx@ORCL>col rowid for a30zx@ORCL>select b.owner,b.object_name,dbms_rowid.rowid_create(1,s.ROW_WAIT_OBJ#,s.ROW_WAIT_FILE#,s.ROW_WAIT_BLOCK#,ROW_WAIT_ROW#) "rowid" from v$session s,dba_objects b where s.ROW_WAIT_OBJ#=b.object_id and s.sid=145;OWNER OBJECT_NAM rowid---------- ---------- ------------------------------ZX ZX AAAYWqAASAAADzTAAH--使用上面查询出的rowid查看数据,即为session2等待的行zx@ORCL>select * from zx.zx where rowid='AAAYWqAASAAADzTAAH'; ID NAME---------- ------------------------------ 1 ZX
官方文档:http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_rowid.htm#ARPLS053
使用下面语句查找会话之间的阻塞关系
SELECT ('节点' || a.inst_id || ' session ' || a.sid || ',' || a_s.serial# || '阻塞了节点' || b.inst_id || ' session ' || b.sid || ',' || b_s.serial#) blockinfo, a.inst_id, a_s.sid, a_s.schemaname, a_s.module, a_s.status, a_s.event, a.type lock_type, a.id1, a.id2, decode(a.lmode, 0, 'none', 1, NULL, 2, 'row-S(SS)', 3, 'row-X(SX)', 4, 'share(S)', 5, 'S/Row-X(SSX)', 6, 'exclusive(X)') lock_mode, a.ctime time_hold, '后为被阻塞信息' remark_flag, b.inst_id blocked_inst_id, b.sid blocked_sid, b.type blocked_lock_type, decode(b.request, 0, 'none', 1, NULL, 2, 'row-S(SS)', 3, 'row-X(SX)', 4, 'share(S)', 5, 'S/Row-X(SSX)', 6, 'exclusive(X)') blocked_lock_request, b.ctime time_wait, b_s.schemaname blocked_schemaname, b_s.module blocked_module, b_s.status blocked_status, b_s.sql_id blocked_sql_id, b_s.event, obj.owner blocked_owner, obj.object_name blocked_name, obj.object_type blocked_object_type, CASE WHEN b_s.row_wait_obj# <> -1 THEN dbms_rowid.rowid_create(1, obj.data_object_id, b_s.row_wait_file#, b_s.row_wait_block#, b_s.row_wait_row#) ELSE '-1' END blocked_rowid, --被阻塞数据的rowid decode(obj.object_type, 'TABLE', 'select * from ' || obj.owner || '.' || obj.object_name || ' where rowid=''' || dbms_rowid.rowid_create(1, obj.data_object_id, b_s.row_wait_file#, b_s.row_wait_block#, b_s.row_wait_row#) || '''', NULL) blocked_data_querysql FROM gv$lock a, gv$lock b, gv$session a_s, gv$session b_s, dba_objects obj WHERE a.id1 = b.id1 AND a.id2 = b.id2 AND a.block > 0 --阻塞了其他人 AND b.request > 0 --AND ((a.INST_ID=b.INST_ID AND a.SID<>b.SID) OR (a.INST_ID<>b.INST_ID )) AND a.sid = a_s.sid AND a.inst_id = a_s.inst_id AND b.sid = b_s.sid AND b.inst_id = b_s.inst_id AND b_s.row_wait_obj# = obj.object_id(+) ORDER BY a.inst_id, a.sid;
阻塞
查询
数据
信息
节点
视图
语句
一行
两个
之间
事件
同时
官方
对象
就是
文件
文档
答案
行号
定位
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
群晖kodi刮削器连不上服务器
网络安全和信息化主要建设
你觉得维护网络安全有必要吗
学软件开发珠海
web服务器nginx配置
网络服务器开发
苹果提示无线网络安全性低
广西网络安全总队总队长
惠普服务器管理口默认
科技猿人互联网
互联网下的小学科技制作
唐河网络安全培训
软件开发项目人员能力要求
数据库怎么防止注入
win7能否做服务器
mac仿真软件开发
微服务如何用数据库
深受顾客喜爱的网络安全接入方案
数据库学科信息怎么填
企业服务器安全
管家婆单机版数据库密码
唐山北优软件开发有限公司
电脑管理服务器无法启动
湖南学软件开发的专科
我的世界梦想斗罗服务器下载
电脑服务器怎么检测
mac仿真软件开发
软件开发行业奖惩制度
webform绑定数据库
市委网络安全挂牌