SQL> create table test tablespace users pctfree 99 as select * from dba_objects order by object_id;
Table created.
SQL> create index objd on test(object_id);
Index created.
SQL> select max(object_id) from test;
MAX(OBJECT_ID)
--------------
52519
session 1 首先全表更新
update test set object_id=object_id+1;
session2 随后更新
SQL> update test set object_id=52519+1 where object_id=52519;
1 row updated.
SQL> select sid,
event,
2 3 row_wait_obj#,
4 row_wait_file#,
5 row_wait_block#,
6 row_wait_row#
7 from v$session
8 where event = 'enq: TX - row lock contention'
9 /
SID EVENT ROW_WAIT_OBJ# ROW_WAIT_FILE# ROW_WAIT_BLOCK# ROW_WAIT_ROW#
---------- ---------------------------------------------------------------- ------------- -------------- --------------- -------------
146 enq: TX - row lock contention 52518 4 50375 0
session 1 被session 2 阻塞 , 造成争用的行是 4号文件 50375 块的 第0行
构造出rowid
SQL> select dbms_rowid.ROWID_CREATE(1,52518,4,50375,0) from dual;
DBMS_ROWID.ROWID_C
------------------
AAAM0mAAEAAAMTHAAA
SQL> select object_id from test where rowid='AAAM0mAAEAAAMTHAAA';
OBJECT_ID
----------
52519下载本文