欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Oracle 基本数据类型-----(RowID详解)

程序员文章站 2022-05-10 15:30:54
...

针对上面文章中的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) 存放到后两位中