rowid浅析

file:///E:/documents/mynote/scrapbook/data/20090608210709/index.html


Oracle的物理扩展ROWID 共80bit  10byte
用18位表示,每位采用64位编码,分别用A~Z、a~z、0~9、+、/共64个字符表示。A表示0,B表示1,……Z表示25,a表示26,……z表示51,0表示52,……,9表示61,+表示62,/表示63。



SQL> select row_id, dump(row_id, 16) dump_rowid from test_rowid;
ROW_ID             DUMP_ROWID
------------------ -------------------------------------------------
AAABnRAAGAAAACWAAA Typ=69 Len=10: 0,0,19,d1,1,80,0,96,0,0


object_id  32bit
每个数据库最多有2^32=4G个对象
0    0    0    0    1    9    D       1             --16#
0000 0000,0000 0000,0001 1001,1101 0001    32bit
前补四个零
0000   0000 0000,0000 0000,0001 1001,1101 0001   --2
        A      A       A      B       n      R   --64
用前6位表示DATA OBJECT NUMBER,将起转化位数字后匹配DBA_OBJECTS中的DATA_OBJECT_ID,可以确定表信息。

rfile#  10bit
每个对象最多有1022个文件(2个文件预留)   这也是oracle新引入扩展rowid的原因
AAG 3*6=18bit


1,80,0,96  rfile#+block#
0000 0001,1000 0000,0000 0000,1001 0110    32bit
取前十bit
0000 0001,10  10bit
前补8bit
0000 0000  0000 0001,10
      A       A       G
第7到9位表示相对表空间的数据文件号。

block#  22bit
每个文件最多有4M个BLOCK
AAAACW  6*6=36bit

00 0000,0000 0000,1001 0110  22bit
前补14bit
0000 0000,0000 00    00 0000,0000 0000,1001 0110
      A       A           A      A       C      W
第10到15位表示这条记录在数据文件中的第几个BLOCK中。

row#  16bit
每个BLOCK最多有64K个ROWS
最后3位表示这条记录是BLOCK中的第几条记录

AAA  3*6=18bit
0000 0000,0000 0000
前补2bit
00 0000 0000,0000 0000
      A        A      A
最后3位表示这条记录是BLOCK中的第几条记录

file#与rfile#的关系
rfile#相对数据文件号的值只能由1到1023    oracle rowid 10bit rfile#
file# 数据文件号一直往上递增的,整个数据库大概可以达到65533个文件


Powered by ScribeFire.

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

转载于:http://blog.itpub.net/9933980/viewspace-630052/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值