1.表空间数据文件容量

oracle11g的表空间数据文件容量与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

2.sql查看DB_BLOCK_SIZE值

select value from v$parameter where name='db_block_size';

我这里是8192 是8k,说明单个数据文件大小不能超过32G

3. DB_BLOCK_SIZE作用如下:

a)DB_BLOCK_SIZE作为数据库的最小操作单位,是在创建数据库的时候指定的,在创建完数据库之后便不可修改。要修改DB_BLOCK_SIZE,需要重建数据库。一般可以将数据EXP出来,然后重建数据库,指定新的DB_BLOCK_SIZE,然后再将数据IMP进数据库。

b) DB_BLOCK_SIZE一般设置为操作系统块的倍数,即2K,4K,8K,16K或32K,但它的大小一般受数据库用途的影响。对于联机事务,其特点是事务量大,但每个事务处理的数据量小,所以DB_BLOCK_SIZE设置小点就足够了,一般为4K或者8K,设置太大话一次读出的数据有部分是没用的,会拖慢数据库的读写时间,同时增加无必要的IO操作。而对于数据仓库和ERP方面的应用,每个事务处理的数据量很大,所以DB_BLOCK_SIZE一般设置得比较大,一般为8K,16K或者32K,此时如果DB_BLOCK_SIZE小的话,那么I/O自然就多,消耗太大。

c) 大一点的DB_BLOCK_SIZE对索引的性能有一定的提高。因为DB_BLOCK_SIZE比较大的话,一个DB_BLOCK一次能够索引的行数就比较多。

对于行比较大的话,比如一个DB_BLOCK放不下一行,数据库在读取数据的时候就需要进行行链接,从而影响读取性能。此时DB_BLOCK_SIZE大一点的话就可以避免这种情况的发生。

4.处理单个表空间数据文件大于32G的问题

一般情况DB_BLOCK_SIZE的值是8K,所以限制大小为32G,当单个表空间数据文件大小超过32G时,表空间容量就达到了最大值,数据库就不能继续增加信息了,我们可以增加新的数据文件。

将表空间存储为多个数据文件,每个文件不大于32GB(精确的值为32768M)

create tablespace TBS_DATA
logging  
datafile '/u01/app/oracle/oradata/TBS_DATA01.dbf' 
size 50m  
autoextend on  
next 50m maxsize 32767m  
extent management local;
--为表空间增加数据文件
alter tablespace JC_DATA  
add datafile '/u01/app/oracle/oradata/TBS_DATA02.dbf' size 50m 
autoextend on next 50m maxsize 3276在这里插入代码片7m;

5.修改临时表空间大小

对一个表创建索引的时候报错“ORA-01652: unable to extend temp segment by 128 in tablespace TEMP”

-- 修改临时表空间tmp的大小8G:
alter database tempfile '/u01/app/oracle/oradata/trade/temp01.dbf' resize 8192m;

-- 将系统的默认临时表空间设为tmp:
alter database default temporary tablespace tmp;

-- 修改用户root的默认表空间为tmp:
alter user root temporary tablespace tmp;