本文的意义:为大数据量的数据库的扩容提供基础。
首先给出依一个最终的公式:
数据文件所能达到的最大值 = oracle数据块的大小 * 数据文件最大的数据块数
filesize = db_block_size * 数据文件最大的数据块数
1、首先介绍RowID
SQL> select ROWID from Bruce_test where rownum<2;
ROWID
------------------ ----------
AAABnlAAFAAAAAPAAA
ROWID的格式如下:
数据对象编号 文件编号 块编号 行编号
OOOOOO FFF BBBBBB RRR
我们可以看出,从上面的rowid可以得知:
AAABnl 是数据对象编号
AAF是相关文件编号
AAAAAP是块编号
AAA 是行编号
怎么依据这些编号得到具体的十进制的编码值呢,这是经常遇到的问题。这里需要明白rowid的是基于64位编码的18个字符显示(数据对象编号(6) +文件编号(3) +块编号(6)+ 行编号(3)=18位),其中
A-Z <==> 0 - 25 (26)
a-z <==> 26 - 51 (26)
0-9 <==> 52 - 61 (10)
+/ <==> 62 - 63 (2)
共64位,明白这个后,就可以计算出10进制的编码值,计算公式如下:
d * (b ^ p)
其中:b就是基数,这里就是64,p就是从右到左,已0开始的位置数
比如:上面的例子
文件号AAF,具体的计算应该是:
5*(64^0)=5;
0*(64^1)=0;
0*(64^2)=0;
文件号就是0+0+5=5
10bit的file number,每个对象最多有1022个文件(2个文件预留)
首先给出依一个最终的公式:
数据文件所能达到的最大值 = oracle数据块的大小 * 数据文件最大的数据块数
filesize = db_block_size * 数据文件最大的数据块数
然后对后面两个参数获得进行解释
该参数在创建数据库的时候就决定了,创建之后便无法修改,也不建议修改。
数据块的大小由初始化参数决定,通常这个值为8KB,也可以定义为:2KB,4KB,16KB,32KB,甚至是64KB
可以通过以下sql查询db_block_size的大小:
sql> select value from v$parameter where name='db_block_size'
1、首先介绍RowID
SQL> select ROWID from Bruce_test where rownum<2;
ROWID
------------------ ----------
AAABnlAAFAAAAAPAAA
ROWID的格式如下:
数据对象编号 文件编号 块编号 行编号
OOOOOO FFF BBBBBB RRR
我们可以看出,从上面的rowid可以得知:
AAABnl 是数据对象编号
AAF是相关文件编号
AAAAAP是块编号
AAA 是行编号
怎么依据这些编号得到具体的十进制的编码值呢,这是经常遇到的问题。这里需要明白rowid的是基于64位编码的18个字符显示(数据对象编号(6) +文件编号(3) +块编号(6)+ 行编号(3)=18位),其中
A-Z <==> 0 - 25 (26)
a-z <==> 26 - 51 (26)
0-9 <==> 52 - 61 (10)
+/ <==> 62 - 63 (2)
共64位,明白这个后,就可以计算出10进制的编码值,计算公式如下:
d * (b ^ p)
其中:b就是基数,这里就是64,p就是从右到左,已0开始的位置数
比如:上面的例子
文件号AAF,具体的计算应该是:
5*(64^0)=5;
0*(64^1)=0;
0*(64^2)=0;
文件号就是0+0+5=5
同样的方式计算出块编号和行编号,就可以唯一获得ROWID了。
2、根据ROWID的方式,计算出小文件的最大数据块数量
其实rowid的存储方式是:
10 个字节即80位存储,其中数据对象编号需要32 位,相关文件编号需要10 位,块编号需要22,位行编号需要16 位。由此,我们可以得出:
32bit的object number,每个 数据库 最多有4G个对象10bit的file number,每个对象最多有1022个文件(2个文件预留)
22bit的block number,每个文件最多有4M个BLOCK
16bit的row number,每个BLOCK最多有64K个ROWS
所以对于小文件来说,每个文件最多有4M个BLOCK。
3、计算出大文件的最大数据库数量
在第二小节中提到,每个其中数据对象编号需要32 位,相关文件编号需要10 位,块编号需要22,位行编号需要16 位。然后对于大文件来说,同一对象只会对应一个文件。所以10位的文件编号与块编号进行合并,归并到块编号,所以就会有32位的块编号。
32bit的block number,每个文件最多有4G个BLOCK
三:数据文件最大容量如下
2KB | 4KB | 8KB | 16KB | 32KB | |
小文件 | 8G | 16G | 32G | 64G | 128G |
大文件 | 8T | 16T | 32T | 64T | 128T |