Oracle rowid的进化

本文详细解析了Oracle数据库中RowID的组成与应用,包括不同版本的RowID结构变化,以及普通索引与全局索引下RowID的区别。还介绍了如何通过DBMS_ROWID包查询RowID的具体信息。

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

1) Oracle 7.3.4.5
            rowid                         rownum                  dump
00000710.0000.0004            1                   01 00 07 10 00
00000710.0001.0004            2
00000710.0002.0004            3
00000710.0003.0004            4

00000710 =  1808: block number
0000 = 0: row#
0004 = 4: file#

01 00 07 10 00  = 10bit (file id) + 22bit(block number) + 16bit(row number)

这个版本的数据库,rowid由6byte组成, 支持2^10 - 1 =1023个数据文件。

2)    Oracle 8.1.7.4
            rowid                            rownum                 dump
AAAOpCAABAAAE5CAAA           1             
AAAOpCAABAAAE5CAAB           2
AAAOpCAABAAAE5CAAC           3
AAAOpCAABAAAE5CAAD           4

AAAOpC :data object number  --  20034
AAB : file number  --  1
AAAE5C : block number -- 59970
AAA: row# -- 0
以上数据的对应关系是通过调用DBMS_ROWID package实现的:
select rowid, rownum , dbms_rowid.rowid_block_number(rowid),
dbms_rowid.rowid_object(rowid)  ,
dbms_rowid.rowid_relative_fno(rowid)
from ...
其真正的算法对我来说还是个秘密。不知道有没有人知道呢?

当使用普通索引时,还是使用6byte的rowid, 当在partition table中使用global  index时,就会使用到10byte的rowid, 它的组成是
32bit (db object number) + 10bit( file id) +  22 bit ( block number) + 16bit(row number),  为什么global index会使用到10byte的rowid呢?这是因为Normal index 可以从rfile# 来算出file#, 而global index则不能,必须通过db object number算出它属于那个tablespace。

3)x$kccfe -- Oralce内部表,用于rfile#到file#的转换。
其中注意FENUM FEREF这二个字段的对应关系。


4)一个tablespace有2^10 - 1的datafile。
       一个big tablespace有2^32 block 。 即为4G的block。
       一个datafile有2^16block。512K block。
      一个数据库有多少个tablespace呢?

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26684/viewspace-206266/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26684/viewspace-206266/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值