使用DBMS_ROWID获取被阻塞行的rowid
发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,在使用v$session视图在查询会话的行锁的等待事件时,视图中提供了会话等待的对象号(ROW_WAIT_OBJ#)、文件号(ROW_WAIT_FILE#)、块号(ROW_WAIT_BLOCK#)和行
千家信息网最后更新 2024年11月19日使用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安全错误
数据库的锁怎样保障安全
做小程序的服务器需要多少钱
传奇服务器时间设置
k8s 配置域名解析服务器
服务器突然一声响炸了
生活数据库的应用实例作用
品质有保证的软件开发公司
货源数据库
宏鼠标驱动软件开发
惠普服务器机箱什么材质好
互联网科技项目融资计划书
组建个人存储服务器
roblox服务器崩溃怎么办
网络技术软件排行榜
高校网络安全管理存在薄弱
南邮大型数据库技术
在哪里学网络安全工程师
上海名企网络安全创新
服务器如何使用视频
做实用软件开发
服务器支持4口千兆网口
游戏手机号数据库
我的世界服务器进去聊天栏信息
自动登陆达梦数据库
万文数据库是
数据库建模什么意思
科目数据库表头 金蝶
本人擅长软件开发
数据库中怎么查询数据
计算服务器企业
计算机网络技术文理都可学吗