ROWID疑似列
ROWID疑似列というくらいなので、「カラム」ではありません。オブジェクト(テーブル)のアドレスとなります。ROWIDは以下項目で構成されます。
- オブジェクト番号
- 行が存在するデータファイル番号
- 行が存在するデータファイルのブロック番号
- ブロック内での行の位置
またDBMS_ROWID.ROWID_CREATE()ファンクションで導出する事ができます。
以下は行ロックが発生している対象レコードを特定する際の使用例です。ROWIDを導出する事で対象レコードがわかります
DBMS_ROWID.ROWID_CREATE ()ファンクションでrowidを求めるサンプル
select
s.ROW_WAIT_OBJ#
,o.OWNER
,o.OBJECT_NAME
,DBMS_ROWID.ROWID_CREATE (
rowid_type => 1 --拡張ROWID
,object_number => s.ROW_WAIT_OBJ# --オブジェクト番号
,relative_fno => s.ROW_WAIT_FILE# --データファイル番号
,block_number => s.ROW_WAIT_BLOCK# --ブロック番号
,row_number => s.ROW_WAIT_ROW# --ブロック内行番号
) as M_ROWID -- rowidを導出
from v$session s
inner join dba_objects o on s.ROW_WAIT_OBJ# = o.OBJECT_ID
where s.BLOCKING_SESSION_STATUS='VALID'
;
select
s.ROW_WAIT_OBJ#
,o.OWNER
,o.OBJECT_NAME
,DBMS_ROWID.ROWID_CREATE (
rowid_type => 1 --拡張ROWID
,object_number => s.ROW_WAIT_OBJ# --オブジェクト番号
,relative_fno => s.ROW_WAIT_FILE# --データファイル番号
,block_number => s.ROW_WAIT_BLOCK# --ブロック番号
,row_number => s.ROW_WAIT_ROW# --ブロック内行番号
) as M_ROWID -- rowidを導出
from v$session s
inner join dba_objects o on s.ROW_WAIT_OBJ# = o.OBJECT_ID
where s.BLOCKING_SESSION_STATUS='VALID'
;