oracle大文件和小文件的区别,oracle文件大小的限制

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

(MOS ID 112011.1)

sql> SELECT TO_CHAR (4194303 * VALUE,'999,999,999')

MAX_BYTES,TO_CHAR (TRUNC (4194303 * VALUE / 1024),999') || ' Kb'

MAX_KB,TO_CHAR (TRUNC (4194303 * VALUE / 1024 / 1024),999') || ' Mb'

MAX_MB

FROM v$parameter

WHERE name = 'db_block_size'; 2 3 4 5 6 7 8

MAX_BYTES MAX_KB MAX_MB

------------------------------------------------ --------------------------------------------- ---------------------------------

34,359,730,176 33,554,424 Kb 32,767 Mb

8k最大为32,767 Mb。DB_BLOCK_SIZE与文件最大值的对应关系如下:

DB_BLOCK_SIZE File Max Mb

~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2048 8191 M

4096 16383 M

8192 32767 M

16384 65535 M

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

sql> select file_id,file_name,bytes/1024/1024 mb from dba_data_files;

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 rows selected.

sql> alter database datafile 6 resize 33G;

alter database datafile 6 resize 33G

*

ERROR at line 1:

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

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

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

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

OOOOOOFFFBBBBBBRRR

OOOOOO:6位,data object id

FFF: 3位,relative_fno

BBBBBB:6位,data block number

RRR: 3位,row number

查询表中某一行的信息:

SELECT SUBSTR (ROWID,1,6) "object",SUBSTR (ROWID,7,3) "file",10,6) "block",16,3) "row"

FROM hr.employees

WHERE ROWNUM = 1;

"object" "file" "block" "row"

AAAMg6 AAF AAAABY ABD

也可以使用DBMS_ROWID:

SELECT DBMS_ROWID.rowid_object (ROWID) obj#,DBMS_ROWID.rowid_relative_fno (ROWID) rfile#,DBMS_ROWID.rowid_block_number (ROWID) block#,DBMS_ROWID.rowid_row_number (ROWID) row#,FROM hr.employees

WHERE ROWNUM = 1;

rowid转换为2进制数为:

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

由此我们可以得出以下结论:

一个库最大obj数=2^32=4G

一个表空间最大file数=2^10=1024(除去file_id=0的数据文件,共1023)

一个数据文件最大block数=2^22=4M=4194303

一个块最大的数据行数=2^16=64K

oracle 10g推出了大文件表空间,可以突破以上文件大小限制。

在大文件表空间中,一个表空间仅包含一个文件,rowid中3位relative_fno不再需要保存相对文件号信息,全部扩展到block,rowid变为OOOOOO.BBBBBBBBB.RRR.

rowid转换为2进制数为:

32bit obj# + 32bit block# + 16bit row#

一个数据文件最大block数=2^32=4G

因此,对于同样的是8K的数据块,大文件表空间的的文件容量上限为32TB。

大文件表空间的文件号以1024开始。大文件表空间不支持UNDO,TEMPORARY和SYSTEM表空间。

总结

以上是编程之家为你收集整理的oracle文件大小的限制全部内容,希望文章能够帮你解决oracle文件大小的限制所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值