ROWID

本文介绍了Oracle数据库中的ROWID概念及其两种类型:扩展ROWID和限制性ROWID。ROWID作为Oracle数据库中每行数据的唯一标识符,对于快速定位特定行至关重要。扩展ROWID包括数据对象号、相对文件号、块号和行号等组成部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当一个用户往Oracle数据库的表中插入一行数据时,Oracle就会自动在这一行数据上加上一个ROWID.
在一个Oracle数据库中每一行数据都会有一个唯一的ROWID,Oracle系统就是利用ROWID来定位数据行的。

ROWID是Oracle数据库提供的一个内置的标量数据类型,ROWID列可以同一个表中的其他列一起查询。
rowid具有一些如下的特性:
*ROWID是数据库中每一行的唯一标识符
*ROWID并不显式的存储为一列的值。
*ROWID可以被用来定位行,虽然它并未直接的给出一行的物理地址。
*ROWID提供了访问一个表中一行数据的最快的机制。

通过引入逻辑ROWID,实现了在索引表中可以有多个索引。
ROWID有两种,分别是扩展ROWID和限制性ROWID,其中扩展ROWID的格式如下:
--------     ---------   ---------   ---------
oooooo        FFF         BBBBBB        RRR
--------     ---------   ---------   ----------
数据对象号    相对文件号    块号         行号

一个扩展ROWID在磁盘上需要10个字节的存储空间,它是用18个字符来显示,扩展ROWID的组成如下:
(1)数据对象号:被赋予每一个对象,它在一个数据库中是唯一的。
(2)相对文件号:对同一个表空间中的每一个文件是唯一的。
(3)块号:为相对文件中包含数据行的块的位置
(4)行号:标识了块头中行目录的位置。

Oracle在内部扩展ROWID时,数据对象号需要32位,相对文件号需要10位,块号需要22位,而行号需要16位
,加起来总共为80位或10个字节。

扩展ROWID的显示是使用一种64位编码。其中:数据对象号为6位,相对文件号需要3位,块号需要6位,而行号需要3位,这种64位编码模式使用的字符为:A~Z,a~z,0~9还有+和/。总共64个字符。

如下:查询ROWID:
SQL> select ename,job,rowid from scott.emp;

ENAME      JOB       ROWID
---------- --------- ------------------
SMITH      CLERK     AAAMfMAAEAAAAAgAAA
ALLEN      SALESMAN  AAAMfMAAEAAAAAgAAB
WARD       SALESMAN  AAAMfMAAEAAAAAgAAC
JONES      MANAGER   AAAMfMAAEAAAAAgAAD
MARTIN     SALESMAN  AAAMfMAAEAAAAAgAAE
BLAKE      MANAGER   AAAMfMAAEAAAAAgAAF
CLARK      MANAGER   AAAMfMAAEAAAAAgAAG
SCOTT      ANALYST   AAAMfMAAEAAAAAgAAH
KING       PRESIDENT AAAMfMAAEAAAAAgAAI

例如SMITH一列:
(1)数据对象号为AAAMfM
(2)相对文件号为AAE
(3)块号为AAAAAg
(4)行号为AAA
使用ROWID可以定位一个数据库中的任何数据行。因为一个段只能存放在一个表空间内。所以可以通过数据对象号Oracle服务器就可以找到包含数据行的表空间。之后使用表空间内的相对文件号就可以确定文件,再利用块号确定包含所需数据行的数据块,最后使用行号定位数据行的行目录项,使用行目录项可以定位数据行的起始地址。

限制性ROWID:
由块号,行号,文件号组成。
与扩展ROWID的最大区别就是:没有数据对象号。

 

整理自 何明《Oracle DBA基础培训教程》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值