Oracle中数据文件大小的限制

oracle数据文件大小限制的公式:

  oracle maximum file size = db_block_size * 4194303 (2^22 = 4194304)

  也就是说最大的数据文件大小是由 db_block_size 来决定的,8KB的数据块的数据文件最大为 8K * 4194304 = 32G,其他的以此类推

  限制的原因在于:由于Oracle的Rowid中使用22位来代表Block号,这22位最多只能代表2^22-1个数据块。

  【注】以上规则适用于smallfile tablespace 下的数据文件,bigfile tablespace 下的数据文件不受此限制

  SQL> create tablespace lob_rms datafile '+DISKGRP1/rms/datafile/lob_rms_01' size 100G;

  create tablespace lob_rms datafile '+DISKGRP1/rms/datafile/lob_rms_01' size 100G

  *

  ERROR at line 1:

  ORA-01144: File size (13107200 blocks) exceeds maximum of 4194303 blocks

  SQL> !oerr ora 1144

  01144, 00000, "File size (%s blocks) exceeds maximum of %s blocks"

  // *Cause: Specified file size is larger than maximum allowable size value.

  // *Action: Specify a smaller size.

 

 

Oracle数据文件的大小存在一个内部限制,这个限制是:
每个数据文件最多只能包含2^22-1个数据块

这个限制也就直接导致了每个数据文件的最大允许大小。
在2K Block_size下,数据文件最大只能达到约8G
在32K的Block_size下,数据文件最大只能达到约16*8G的大小。

这个限制是由于Oracle的Rowid中使用22位来代表Block号,这22位最多只能代表2^22-1个数据块。

为了扩展数据文件的大小,Oracle10g中引入了大文件表空间,在大文件表空间下,Oracle使用32位来代表Block号,也就是说,在新的技术下,大文件表空间下每个文件最多可以容纳4G个Block。
那么也就是说当Block_size为2k时,数据文件可以达到8T 。
当block_size为32K时,数据文件可以达到128T。

猜你喜欢

转载自jayyanzhang2010.iteye.com/blog/1861248