oracle数据库大小文件最大值的计算方式

本文的意义:为大数据量的数据库的扩容提供基础。

首先给出依一个最终的公式:
数据文件所能达到的最大值 = oracle数据块的大小 * 数据文件最大的数据块数
filesize = db_block_size *  数据文件最大的数据块数

然后对后面两个参数获得进行解释


一、db_block_size 为oracle数据块的大小

该参数在创建数据库的时候就决定了,创建之后便无法修改,也不建议修改。

数据块的大小由初始化参数决定,通常这个值为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

三:数据文件最大容量如下

 2KB4KB8KB16KB32KB
小文件8G16G32G 64G128G
大文件8T16T32T64T128T


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值