使用DBMS_ROWID获取被阻塞行的rowid
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,在使用v$session视图在查询会话的行锁的等待事件时,视图中提供了会话等待的对象号(ROW_WAIT_OBJ#)、文件号(ROW_WAIT_FILE#)、块号(ROW_WAIT_BLOCK#)和行
千家信息网最后更新 2025年01月21日使用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安全错误
数据库的锁怎样保障安全
智能网络技术目标
工作站主要用于网络服务器
外国游戏在中国的服务器由谁管理
共建网络安全议论文800字
小学生网络安全宣传语短
分布式数据库系统复制透明性
重庆pdu服务器专用电源制造商
无线网络技术 合工大
软件开发方法的流程
网络技术专业电话
检察院开展网络安全法治巡讲
网络安全java源码
软件开发技术ppt演讲
圆梦计划软件开发
服务器防安全软件
每天同步全量数据库
济南博为峰软件开发公司
2020年服务器出租价格变化
农业方面的软件开发公司
常用流媒体服务器
尚猷网络技术公司
数据库启动后又停止了
金融及软件开发
数据库字段有下划线怎么查询
南山区正规网络技术开发诚信互利
项目部署到服务器步骤
查看数据库表的锁级别
有没有合适的服务器推荐
个体工商经营网络技术
java 数据库添加列