表空间数据文件容量与DB_BLOCK_SIZE的设置有关,而这个参数在创建数据库实例的时候就已经指定。DB_BLOCK_SIZE参数可以设置为4K、8K、16K、32K、64K等几种,Oracle的物理文件最大只允许4194304个数据块(这个参数具体由操作系统决定,一般应该是此数字),表空间数据文件的最大值对应关系就可以通过4194304×DB_BLOCK_SIZE/1024M计算得出。
4k最大表空间为:16384M
8K最大表空间为:32768M
16k最大表空间为:65536M
32K最大表空间为:131072M
64k最大表空间为:262144M
而Oracle默认分配的为8K,也就是对应于32768M左右的空间大小,如果想继续增大表空间的话,只需要通过alter tablespace name add datafile ‘path/file_name’ size 1024M;添加数据文件的方式就可以了。
数据块是oracle中最小的空间分配单位,各种操作的数据就的放在这里,oracle从磁盘读写的也是块。一旦create database,db_block_size就是不可更改的。因为oracle是以块为单位存储数据的,任何一个存储元素最少占用一个块,如果你改变了db_block_size,必然导致部分块不能正常使用。
其实在unix类操作系统中,文件块和oracle块的关系非常紧密(建议相等),这样才能保证数据库的执行效率。在windows下可能就不这么讲究了。建议使用8k以上的块,有人做过测试,同样的配置,8k的块比4k快大约40%,比2k快3倍以上。
<二.>
1、64位linux 和64位oracle,默认oracle表空间数据文件用的BLOCKSIZE是8k,表空间数据文件最大是32G。
SQL>show parameter k_cache_size
查看数据库默认的块大小
SQL> show parameter db_block_size
db_block_size integer 8192
2、为了让一个表空间数据文件存64G,你需要告诉oracle用BLOCKSIZE 是16k
CREATE TABLESPACE TEST DATAFILE ‘/data1/test_ts1.dbf’ SIZE 512M AUTOEXTEND ON NEXT 256M MAXSIZE UNLIMITED BLOCKSIZE 16k;
提前需要设置db_16k_cache_size
alter system set db_16k_cache_size=16M scope=both;
否则会报错ORA-29339:
tablespace block size 16384 does not match configured block sizes
3、为了让一个表空间数据文件存128G,你需要告诉oracle用BLOCKSIZE 是32k
4、32位linux 和32位oracle,默认oracle表空间datafile用的BLOCKSIZE也是8k,表空间数据文件最大也是32G。试了一下64G文件,也没有问题。
浙公网安备 33010602011771号