教学文章
Technology Exchange
热门课程
400电话

免费咨询热线
400-090-9964

教学文章

Oracle数据文件头块保留大小

时间:2017-08-09 来源:

  本地管理表空间中设置不同大小的db_block_size时数据文件头保留空间对应如下:

  db_block_size=2KB,文件头保留32个数据块,即64KB。

  db_block_size=4KB,文件头保留16个数据块,即64KB。

  db_block_size=8KB,文件头保留8个数据块,即64KB。

  db_block_size=16KB,文件头保留4个数据块,即64KB。

  db_block_size=32KB,文件头保留4个数据块,即128KB。

  默认是db_block_size=8KB,此时 ORACLE数据文件头的8个数据块作用是:

  数据块1和2记录数据文件头信息。3-8用于记录extent-区间的位图信息 --11G中要保留到128个块???

  ################################

  Oracle数据库中的数据文件的最大数量是有限的(通常为64K文件)。--来自官方文档

  表空间支持的最大数据文件大小的算法:

  分两种情况:smallfile tablespace与bigfile tablespace

  smallfile tablespace的ROWID

  记录存储所在数据文件(file#),所属数据库对象,所在数据块中的行号,这些属性合并起来构成了ORACLE ROWID.

  ORACLE ROWID分为物理ROWID,逻辑ROWID。

  索引组织表(IOTs)使用逻辑ROWID,其它类型的表使用物理ROWID。

  ROWID可以惟一标识一条记录,所以索引中存储了ROWID的值,通过访问索引,得到ROWID,再定位到记录。

  ROWID采用Base64编码,共18位代表80位二进制数,占用10个字节。

  每组字符代表不同的含义,18位最大寻址空间“32G”。。

  对一条行ID的解析:OOOOOO.FFF.BBBBBB.RRR --其中.是为了方便观看手动增加

  OOOOOO: 1-6位:对象id

  FFF: 7-9位:文件id

  BBBBBB: 10-15位:块id

  RRR: 16-18位:行id

  对于Base64编码,共18位代表80位二进制数,计算方法是:

  32bit obj# + 10bit file# + 22bit block# + 16bit row#

  通过ROWID计算数据块的相关信息,详见:http://blog.csdn.net/q947817003/article/details/11490051

  根据small file tablespace的ROWID,计算出表空间、数据文件、BOOCK中行最大数如下:

  根据ROWID的构成: ---注:2^10这种写法代表2的10次方,等于1024.

  每个表空间最大文件数: 2^10 1024 ,去掉全0和全1 通常1022个 ---实验测试出是1023个,见:数据文件个数大于1024时ORACLE数据文件FILE_ID及RELATIVE_FNO的变化示例

  每数据文件最大数据块数量:filesize=block_size*2^22 ,也就是4M个ORACLE BLOCK

  每个BLOKC中行数是: 2^16 65536,也就是每个BLOCK最多65536条记录

  每个数据库最多65536个-64K个数据文件(实验测试出是65534----官方文档上是65533-http://docs.oracle.com/cd/B19306_01/server.102/b14237/limits002.htm#i287915),最多支持64K个表空间,因为每个表空间最少需要包含一个数据文件。引出新问题:如果数据库有大于1024个数据文件,ORACLE如何通过ROWID定位数据文件呢? --详见:数据文件个数大于1024时ORACLE数据文件FILE_ID及RELATIVE_FNO的变化示例

  更详细的数据库限制见官方文档:http://docs.oracle.com/cd/B19306_01/server.102/b14237/limits.htm#REFRN004

  smallfile tablespace设置不同大小的db_block_size时数据文件允许的最大大小

  db_block_size=2KB,2KB*4M=8192M 8G

  db_block_size=4KB,4KB*4M=16384M 16G

  db_block_size=8KB,8KB*4M=32768M 32G 8*1024*4M=8*4G=32G

  db_block_size=16KB,16KB*4M=65536M 64G

  db_block_size=32KB,32KB*4M=131072M 128G

  #########################################################

  BIGFILE表空间的ROWID

  因为大文件表空间只能包含一个文件,所以ROWID中不需要file#-文件ID。

  大文件表空间的ROWID格式为:

  OOOOOO.LLLLLLLLL.RRR

  OOOOOO: 1-6位:对象id

  LLLLLLLLL: 7-15位:块id

  RRR: 16-18位:行id

  L代表BLOCK号,代替了小文件表空间中ROWID中的file# + block#的位置.

  这样大文件表空间的数据文件支持的BLOCK数量最多是:2bit. 2^32=4G.

  bigfile tablespace设置不同大小的db_block_size时数据文件允许的最大大小

  db_block_size=2KB,2KB*4G= 8T

  db_block_size=4KB,4KB*4G= 16T

  db_block_size=8KB,8KB*4G= 32T 8*1024*4G=8*4TB=32TB

  db_block_size=16KB,16KB*4G= 64T

  db_block_size=32KB,32KB*4G=128TB

  (以上内容摘于网络,如有侵权,请告之,将第一时间删除)

版权所有@北京神脑资讯技术有限公司(CUUG,中国UNIX用户协会) Copyright ALL Rights Reserved 京ICP备11008061号-1

CUUG旗下网站:www.cuug.com.cn www.cuug.com oracle.cuug.com bbs.cuug.com www.cuug.net

电话:010-59426307 010-59426319 邮政编码:100089

地址:北京市海淀区北清路164号28-38号院