甲骨文文件大小的限制

  

标准的甲骨文数据文件最多可以包含4194303个Oracle数据块。所以这也表示单个数据文件大小的上限取决于所用的甲骨文块大小。

  
  

112011.1 (MOS ID)

     
 <代码>完成;选择TO_CHAR(4194303 *价值,' 999999999999 ')
  MAX_BYTES,
  TO_CHAR (TRUNC(4194303 *值/1024),' 999999999 ')| |“知识库”
  MAX_KB,
  TO_CHAR (TRUNC(4194303 *值/1024/1024),' 999999 ')| |“m”
  MAX_MB
  从v参数
  name=' db_block_size ';2 3 4 5 6 7 8
  
  MAX_BYTES MAX_KB MAX_MB
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  34359730176 33554424 Kb 32767 Mb  
  

8 k最大为32767 Mb.DB_BLOCK_SIZE与文件最大值的对应关系如下:

  
 <代码> DB_BLOCK_SIZE马克斯Mb的文件
  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
  2048 8191
  4096 16383
  8192 32767
  16384年65535  
  

尝试修改下数据文件的大小:

  
 <代码>完成;选择file_id、file_name字节/1024/1024从dba_data_files mb;
  
  FILE_ID FILE_NAME MB
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  4/u01/oradata/prodb/users01。dbf 106.25
  3/u01/oradata/prodb/sysaux01。dbf 270
  2/u01/oradata/prodb/undotbs01。dbf 605
  1/u01/oradata/prodb/system01。dbf 630
  5/u01/oradata/prodb/example01。dbf 100
  6/u01/oradata/prodb/test_01。dbf 200
  
  6行选择。
  
  完成;修改数据库数据文件6调整33 g;
  修改数据库数据文件6调整33 g
  *
  误差在1号线:
  ora - 01144:文件大小(4325376块)超过最多4194303块 
  

报错,不能超过4194303块限制。

  

标准数据文件中的4194303块数从哪里来的呢?

  

普通数据文件数据的详细地址是由Base64编码的18位rowid组成,形式如下:

  
 <代码> OOOOOOFFFBBBBBBRRR
  OOOOOO: 6位,数据对象id
  FFF: 3位,relative_fno
  BBBBBB: 6位,数据块编号
  存款准备金率:3位,行号 
  

查询表中某一行的信息:

  
 <代码>选择SUBSTR (ROWID (1,6)“对象”,
  SUBSTR (ROWID 7 3)“文件”,
  SUBSTR (ROWID 10 6)“块”,
  SUBSTR (3) ROWID, 16日“行”
  从hr.employees
  ROWNUM=1;
  
  “对象”“文件”“块”“行”
  AAAMg6空军联队AAAABY ABD  
  

也可以使用DBMS_ROWID:

  
 <代码>选择DBMS_ROWID。rowid_object (ROWID) obj #,
  DBMS_ROWID。rowid_relative_fno (ROWID) rfile #,
  DBMS_ROWID。rowid_block_number (ROWID)块#,
  DBMS_ROWID。rowid_row_number (ROWID)行#,
  从hr.employees
  ROWNUM=1;  
  

rowid转换为2进制数为:
<代码> 32位obj # + 10位文件# + 22位块# + 16位行#

  

由此我们可以得出以下结论:
一个库最大obj数=2 ^ 32=4 g
一个表空间最大文件数=2 ^ 10=1024(除去file_id=0的数据文件,共1023)
一个数据文件最大块数=2 ^ 22=4 m=4194303
一个块最大的数据行数=2 ^ 16=64 k

  
  

限制请参考:https://docs.oracle.com/cd/B19306_01/server.102/b14237/limits.htm REFRN004

     

oracle 10 g推出了大文件表空间,可以突破以上文件大小限制。
在大文件表空间中,一个表空间仅包含一个文件,rowid中3位relative_fno不再需要保存相对文件号信息,全部扩展到块,rowid变为OOOOOO.BBBBBBBBB.RRR。
rowid转换为2进制数为:
<代码> 32位obj # + 32位块# + 16位行#
一个数据文件最大块数=2 ^ 32=4 g
因此,对于同样的是8 k的数据块,大文件表空间的的文件容量上限为32结核病。

  

大文件表空间的文件号以1024年开始。
大文件表空间不支持撤销,临时和系统表空间。

甲骨文文件大小的限制