文档课题:oracle rowid字段解析.标签:SYS,test,字段,rowid,oracle,ID,simdb,row From: https://blog.51cto.com/u_12991611/6007611
1、相关概念
rowid是一行数据的唯一标识,是数据的详细地址,通过rowid可快速定位某行数据的具体位置. 其可分为物理rowid和逻辑rowid.普通堆表的rowid是物理rowid,索引组织表(IOT)是逻辑rowid.此外oracle提供一种urowid的数据类型同时支持物理和逻辑rowid.本文主讲解物理rowid.
物理rowid又分扩展rowid(extended rowid)和限制rowid(restricted rowid)两种格式.限制rowid主要是oracle 7以前的格式,现已不再使用,保留该类型只是为了兼容性.
2、操作演练
SYS@simdb> create table test (id number,name varchar2(10));
Table created.
SYS@simdb> insert into test values(0,'leo');
1 row created.
SYS@simdb> insert into test values(1,'alina');
1 row created.
SYS@simdb> insert into test values(2,'peter');
1 row created.
SYS@simdb> insert into test values(3,'cherry');
1 row created.
SYS@simdb> select rowid,id,name from test;
ROWID ID NAME
------------------ ---------- ----------
AAASbuAABAAA+aBAAA 0 leo
AAASbuAABAAA+aBAAB 1 alina
AAASbuAABAAA+aBAAC 2 peter
AAASbuAABAAA+aBAAD 3 cherry
说明:oracle中每张表都有rowid,该列为隐藏字段.默认查看表数据时不会出现,只有特意加上rowid字段才会出现.
3、相关知识
rowid的显示形式:select出来的rowid是基于base64编码,共有18位且分为4部分.
OOOOOOFFFBBBBBBRRR
说明:以上是9i及以后版本的格式.
a、前6位(OOOOOO)为数据对象ID,表、索引都是数据对象,oracle会分配一个唯一的数据对象ID.
b、紧跟的3位( FFF )为相对文件ID,表空间由不同文件组成,对象存储在某个文件里,每个文件会对应一个ID号.
c、再接着的6位( BBBBBB )为块ID ,文件由块组成,每个块也有一个唯一的ID编号.
d、最后3位( RRR )为行ID ,每个块又划分成行,每个行也有一个ID号.
4、具体ID信息
可根据64位编码表转义到具体的数据对象ID、文件ID、块ID、行ID.
SYS@simdb> select dbms_rowid.rowid_object(rowid) obj_id,
2 dbms_rowid.rowid_relative_fno(rowid) rfile_id,
3 dbms_rowid.rowid_block_number(rowid) block_id,
4 dbms_rowid.rowid_row_number(rowid) row_id,
5 dbms_rowid.rowid_to_absolute_fno(rowid, 'SYS', 'TEST') file#
6 from sys.test;
OBJ_ID RFILE_ID BLOCK_ID ROW_ID FILE#
---------- ---------- ---------- ---------- ----------
75502 1 255617 0 1
75502 1 255617 1 1
75502 1 255617 2 1
75502 1 255617 3 1
以上内容均来自以下网址,如有侵权请联系博主删帖.
参考文档:https://www.bbsmax.com/A/gAJGVkl1zZ/