被确定且唯一。而对于聚簇表,由于聚簇特性,不同表上的记录由于存储在相同的簇上,因此会拥有相同的ROWID。数据库的大多数操作都是通
过ROWID来完成的,而且使用ROWID来进行单记录定位速度是最快的。下面将给出ROWID的相关描述。
一、ROWID的特性组成及用途
1、特性
相对唯一性(聚簇表上不唯一)
一旦确定,不可随意更改
使用10个字节存储(扩展rowid),显示为18位的字符串
特殊情况下,ROWID会发生变化(如下列情形)
表的导入导出操作
alter table tab_name move
alter table tab_name shrink space
flashback table tab_name
拆分分区表
分区表上更新一个值后记录被移入到新分区
合并两个分区
2、组成(扩展ROWID)
数据库对象的对象编号
数据库对象所在文件的文件编号
数据库对象上块的编号
块上的行编号(起始值为0)
3、用途
快速定位单行记录
展示行在表上如何存储
表上的一行的唯一标识符
用作数据类型 column_name rowid
4、限制rowid,扩展rowid
限制rowid用于早期Oracle版本(Oracle 8 以前),rowid由file#+block#+row#组成,占用6个bytes的空间
扩展rowid,由data_object_id#+rfile#+block#+row#组成,占用10个bytes的空间
Select
dbms_rowid.rowid_object(rowid) object_id, -->使用dbms_rowid包获得rowid的十进制信息
dbms_rowid.rowid_relative_fno(rowid) file_id,
dbms_rowid.rowid_block_number(rowid) block_id,
Dbms_Rowid.Rowid_Row_Number(Rowid) Num
from dept;
- OBJECT_ID FILE_ID BLOCK_ID NUM -->此处可以看到对应的对象号,文件号,块号以及行号
- ---------- ---------- ---------- ----------
- 73194 4 135 0
73194 4 135 1
73194 4 135 2
73194 4 135 3
通过object_id和file_id 可以定位对象与文件
select * from user_objects where object_id=73194;
select * from dba_data_files where file_id=4;