rowid

ROWID的格式
rowidOOOOOOFFFBBBBBBRRR
说明数据对象号相对文件号数据块号行号

上述表格是Oracle 9i及以上版本数据库中的rowid格式:

6位对象号+3位相对文件号+6位数据块号+3位行号,是一个18位的64进制值。这个18位的64进制值在数据库内却是以10个bytes合计80个bit的二进制数存放的,和我们直接看到的结果有所区别。

这里的64进制和10进制的对应编码如下:

 

其中, 6位的对象号在数据库中是用32位二进制来存放的,也就意味着一一个oracle数据库中最多可以有232个对象,即4G个对象; 3位的相对文件号在数据库中是用10位二进制来存放的,也就意味著-一个表空间中最多可以容纳210=1024去掉全0和全1个数据文件 ,

即1022个数据文件; 6位的数据块号用22位二进制来存放的,也就意味着-个数据文件最多可以包含222=4M个数据块; 3位的行号在数据库中是用1 6位二进制来存放的,也就意味著一一个数据块上最多可以容纳21 6-65536行记录。

 

对于大文件表空间下的rowid有如下特定的格式,这有别于小文件表空间下的rowid格式:

000000BBBBBBBBBRRR

即,6位的数据库对象号+9位的数据块号+3位的行号,同样也是以18位的64进制值来表示80位的二进制数。只不过,在这里少了相对文件号,其中6位的数据库对象号用32位的二进制数来存放(即-一个数据库最多可以拥有232=4G个数据块对象),9位的数据块号同样用32位的二进制数来存放(即一个大文件表空间可以拥有232个数据块儿),最后3位的行号占用剩余的16位的二进制数,正好占满80位。

 

 

大文件相对文件号为0,因为大文件的表的rowid格式中根本就不存在相对文件号的信息,最本质的原因是大文件表空间下永远只能有且仅有1个数据文件。也就没有相对文件号的概念了。同时,对于大文件的表空间,如果数据块大小为32K的话,那

我们可以在查询列表中,把rowid伪列当做普通的字段来查询。

我们还可以通过数据库提供给我们的工具包来获取该信息:

SQL> select rowid,

2 dbms _rowid.rowid_ _bject(rowid) object id,3 dbms, _kowid.rowid_ relative_ fnorowid) file_ id,

4 dbms_ rowid.rowid. bock _number(rowid) block_ jd ,5 dbms_ rowidrowid_ row_ number(rowid) num ,

6 rowidtochar(rowid) from employees where employee_ jd=1007;

ROWID  OBJECT_ID FILEI _ID BLOCK_ ID  NUM ROWIDTOCHAR(ROWID)

AAAR5pAAF AAAADPAAA  73321  5  207  : 0 AAAR5pAAFAAAADPAAA

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凤舞飘伶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值