如何通过obj_id等参数查询数据行及定位行锁争用数据行?
Oracle行定位问题解决方案
1. 已知obj_id、file_id、block和row,查询对应数据行
直接用Oracle自带的DBMS_ROWID包构造目标行的ROWID,就能精准查询到对应数据行:
SELECT * FROM 你的表名 WHERE ROWID = DBMS_ROWID.ROWID_CREATE( 1, -- 版本标识,固定传1 已知的obj_id, 已知的file_id, 已知的block号, 已知的row号 );
2. 从v$session锁等待信息定位争用数据行
第一步:通过row_wait_obj#找到对应表名
先把会话查询到的row_wait_obj#转换成实际表名:
SELECT owner, table_name FROM dba_objects WHERE object_id = 258; -- 替换为你的row_wait_obj#数值
第二步:构造ROWID查询争用数据行
拿到表名后,用DBMS_ROWID构造ROWID,查询被锁的目标行:
SELECT * FROM 第一步查到的表名 WHERE ROWID = DBMS_ROWID.ROWID_CREATE( 1, 258, -- row_wait_obj# 1, -- row_wait_file# 2082, -- row_wait_block# 0 -- row_wait_row# );
内容的提问来源于stack exchange,提问作者neolei
相关产品推荐
相关产品推荐

