oracle查看被锁的行,查找被锁的表到底是哪一行被锁定了
有一個(gè)人問,所以總結(jié)了一下。
http://www.itpub.net/528153.html
簡單的總結(jié)一下。
首先v$session中的這幾個(gè)字段的含義分別為
row_wait_row#---被鎖定行的rownum,但是準(zhǔn)確的說是對應(yīng)的于rowid的rownum,并非是單純的rownum。下面再詳細(xì)的說。
row_wait_obj#---row_wait_row#對應(yīng)的rowid所在的表的object id。
row_wait_file#-- row_wait_row#對應(yīng)的rowid所在的數(shù)據(jù)文件id
row_wait_block#--row_wait_row#對應(yīng)的rowid所在的block的id
只有一個(gè)session等待另一個(gè)session的時(shí)候,這幾個(gè)列的值才是有效的。
想要知道某一個(gè)表具體被鎖定的是哪一行,可以利用上面這幾個(gè)值,查找出被鎖定行的rowid。
使用dbms_rowidb包的一個(gè)子過程(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 表示生成一個(gè)restricted ROWID(pre-oracle8 format); 取值為1 表示生成一個(gè)extended ROWID.
object_number取值是dba_objects視圖中的data_object_id,并不是object_id,也就是說不能用row_wait_obj#.
relative_fno取值是Relative文件號,在dba_data_files里可以查到
block_number取值是數(shù)據(jù)文件的塊號,也就是v$session中的row_wait_block#的值
row_number通過rowid對應(yīng)出來的rownum,也就是row_wait_row#的值。
通過使用
select DBMS_ROWID.ROWID_CREATE(1,data_object_id,relative_fno,row_wait_block#,row_wait_row#) from dual;
查找出的rowid即為被鎖定的行。
如果有多行數(shù)據(jù)被鎖定,row_wait_row#顯示的是靠''前''的行。
總結(jié)
以上是生活随笔為你收集整理的oracle查看被锁的行,查找被锁的表到底是哪一行被锁定了的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 日志注册,Oracle日常
- 下一篇: Oracle PCTfree assm,