oracle查看被锁的行,查找被锁的表到底是哪一行被锁定了

有一个人问,所以总结了一下。

http://www.itpub.net/528153.html

简单的总结一下。

首先v$session中的这几个字段的含义分别为

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

只有一个session等待另一个session的时候,这几个列的值才是有效的。

想要知道某一个表具体被锁定的是哪一行,可以利用上面这几个值,查找出被锁定行的rowid。

使用dbms_rowidb包的一个子过程(Subprograms)rowid_create

DBMS_ROWID.ROWID_CREATE (

rowid_type    IN NUMBER,

object_number IN NUMBER,

relative_fno  IN NUMBER,

block_number  IN NUMBER,

row_number    IN NUMBER)

RETURN ROWID;

其中rowid_type的取值为 0 表示生成一个restricted ROWID(pre-oracle8 format); 取值为1 表示生成一个extended ROWID.

object_number取值是dba_objects视图中的data_object_id,并不是object_id,也就是说不能用row_wait_obj#.

relative_fno取值是Relative文件号,在dba_data_files里可以查到

block_number取值是数据文件的块号,也就是v$session中的row_wait_block#的值

row_number通过rowid对应出来的rownum,也就是row_wait_row#的值。

通过使用

select DBMS_ROWID.ROWID_CREATE(1,data_object_id,relative_fno,row_wait_block#,row_wait_row#) from dual;

查找出的rowid即为被锁定的行。

如果有多行数据被锁定,row_wait_row#显示的是靠''前''的行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值