Oracle 基本数据类型-----(RowID详解)
程序员文章站
2022-05-10 15:27:36
...
针对上面文章中的rowid最大值为什么是 1024 ,因为:相对文件号 * 64 存放到前两位中。所以
SQL> select power(256,2) / 64 from dual ;
POWER(256,2)/64
---------------
1024
所以,相对文件号最大为: 1024 。但是block快的最大值又是怎么来的??
因为 相对文件号都是 64 的倍数,并且相对文件号 和 block 一起存放到 上述的四位中,并且文件号占据了前两位,block快占据了后两位。后两位的最大值是
SQL> select power(256,2) from dual ;
POWER(256,2)
------------
65536
若是block快的最大值超过了 65536 ,则其值将会和文件号共享 前两位。计算的方式:前两位的数值/64 的商作为文件号,余数则作为block的数值,并且和后两位的数字进行相加为block的块号。即:
trunc(block_id/65536) 的值加到 file id 中存储在前两位。
mod(block_id , 65536) 存放到后两位中