实验如下:
三个会话,分别为s141 s18 及单独会话系统状态的窗口。实验对象为tx_eg。两个会话更新表的第三行(num=3),我们通过相关视图进行,能否找出对应的行?
sid141执行如下
luqx@oradb>select distinct(sid) from v$mystat;
sid
----------
141
luqx@oradb>select * from tx_eg;
num txt sex
---------- ---------- ----------
1 garbage female
2 second male
3 third male
4 garbage male
5 fifth male
luqx@oradb>update tx_eg set txt='thirdsd' where num=3;
1 row updated.
sid18执行如下
luqx@oradb>select distinct(sid) from v$mystat;
sid
----------
18
luqx@oradb>update tx_eg set txt='thirdsd' where num=3;
单独窗口执行状态查看 查看当前锁的状态目前持有锁的会话为141(lmode=6)
sys@oradb> select sid,type,id1,id2,lmode,request,ctime,block from v$lock where block >0;
sid ty id1 id2 lmode request ctime block
---------- -- ---------- ---------- ---------- ---------- ---------- ----------
141 tx 196638 1774 6 0 110 1
2、查看141阻塞的会话及对应的block信息
select sid,row_wait_obj#, row_wait_file#, row_wait_block#, row_wait_row# from v$session where blocking_session=&blocking_session;
sid row_wait_obj# row_wait_file# row_wait_block# row_wait_row#
---------- ------------- -------------- --------------- -------------
18 91604 6 435 2
details of blocked session
sid of blocked session: 18
object_id: 91604 对象名称
file #: 6 所再数据文件编号
block #: 435
row_wait_row#---被锁定行的rownum,但是准确的说是对应的于rowid的rownum,并非是单纯的rownum。下面再详细的说。
row_wait_obj#---row_wait_row#对应的rowid所在的表的object id。
row_wait_file#-- row_wait_row#对应的rowid所在的数据文件id
row_wait_block#--row_wait_row#对应的rowid所在的block的id
3、进一步确认行内容
查看对象信息通过object_id
column owner format a20
column object_name format a40
select owner,object_name from dba_objects where object_id=&object_id ;
通过wait_file#查看对象存在的文件信息
select rfile#, file# , name from v$datafile where file# = &file_number;
通过关联查询查看sid141的会话对应的行rowid
column object_name format a30
select do.object_name ,
s.row_wait_obj# ,
s.row_wait_file# ,
s.row_wait_block#,
s.row_wait_row# ,
dbms_rowid.rowid_create ( 1, data_object_id, rfile#, row_wait_block#, row_wait_row# )
from v$session s,
dba_objects do,
v$datafile v
where s.blocking_session = &blocking_session
and s.row_wait_obj# = do.object_id
and s.row_wait_file# = v.file#; 输入141会话的sid
红色为对应的rowid
通过rowid查看row信息,num=3
sys@oradb>select * from luqx.tx_eg where rowid='aaawxuaagaaaagzaac';
num txt sex
---------- ---------- ----------
3 third male
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 sumchina520@foxmail.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.dasum.com/44010.html
如若转载,请注明出处:https://www.dasum.com/44010.html