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' ;
SQL> select
2 s.ROW_WAIT_OBJ#
3 ,o.OWNER
4 ,o.OBJECT_NAME
5 ,DBMS_ROWID.ROWID_CREATE (
6 rowid_type => 1 --拡張ROWID
7 ,object_number => s.ROW_WAIT_OBJ# --オブジェクト番号
8 ,relative_fno => s.ROW_WAIT_FILE# --データファイル番号
9 ,block_number => s.ROW_WAIT_BLOCK# --ブロック番号
10 ,row_number => s.ROW_WAIT_ROW# --ブロック内行番号
11 ) as M_ROWID -- rowidを導出
12 from v$session s
13 inner join dba_objects o on s.ROW_WAIT_OBJ# = o.OBJECT_ID
14 where s.BLOCKING_SESSION_STATUS='VALID'
15 ;
ROW_WAIT_OBJ# OWNER OBJECT_NAME M_ROWID
________________ ________ ______________ _____________________
100061 SOONI EX01 AAAYbdAAFAAAADVAAF
SQL> select * from sooni.ex01 where rowid='AAAYbdAAFAAAADVAAF'
2 ;
SID SNAME BIRTHDAY NOTE KANA ROMA
______ ________ ___________ __________ _______ _______
7 喜多川 00-12-13 納豆は嫌いです
SQL>