在Oracle 9i数据库中支持同一个数据库使用不同大小的Oracle 数据块,可以在表空间一级定义数据块的大小,例如:
CREATE TABLESPACE TBS1 ... BLOCKSIZE 16K; CREATE TABLESPACE TBS2 ... BLOCKSIZE 8192; |
其中,BLOCKSIZE可以取2K,4K,8K,16K,如果操作系统支持,甚至可以取32K。可以通过DBA_TABLESPACES视图中的BLOCK_SIZE列值查看表空间的块尺寸。
和Oracle 9i 以前的版本一样,在创建数据库的时候还是需要在参数文件中指定DB_BLOCK_SIZE参数(缺省数据库数据块尺寸,也成为标准块尺寸,standard block size)的值。这个参数的值将作为创建表空间时的缺省块尺寸(如果不指定新表空间的块尺寸的话),并且DB_BLOCK_SIZE参数的值仍然是在创建数据库的时候指定以后,除非重建数据库,否则不能更改。
需要注意的是:
· 当使用分区时,一个分区表的所有分区必须在相同的BLOCKSIZE的表空间中。
· 索引和相应的表可以放在不同的BLOCKSIZE的表空间中。
· 系统表空间的块尺寸只能是DB_BLOCK_SIZE参数的值
在Oracle 9i中参数DB_CACHE_SIZE 替代了以前的 DB_BLOCK_BUFFERS参数,并使用字节为单位表示高速缓冲区的大小(而不是以块为单位)。
当我们在一个数据库中使用多块设置的时候,必须指定DB_CACHE_SIZE参数,并且为不同块设置的表空间设置DB_nK_CACHE_SIZE参数(至少指定一个DB_nK_CACHE_SIZE参数),其中,n可以是2,4,8,16,32,即:
DB_2K_CACHE_SIZE 的缓冲区是为了存取2k数据块尺寸的表空间对象而指定的高速缓存;
DB_4K_CACHE_SIZE的缓冲区是为了存取4k数据块尺寸的表空间对象而指定的高速缓存;
DB_8K_CACHE_SIZE的缓冲区是为了存取8k数据块尺寸的表空间对象而指定的高速缓存;
DB_16K_CACHE_SIZE的缓冲区是为了存取16k数据块尺寸的表空间对象而指定的高速缓存;
DB_32K_CACHE_SIZE的缓冲区是为了存取32k数据块尺寸的表空间对象而指定的高速缓存;
注意,n不能指定为和缺省数据块尺寸大小相同的数值,例如,如果DB_BLOCK_SIZE = 8192(8KB),那么就不能设置DB_8K_CACHE_SIZE参数。
例如:
MAX_SGA_SIZE = 700M
SHARE_POOL_SIZE = 80M
DB_BLOCK_SIZE = 8192
DB_CACHE_SIZE = 290M
DB_2K_CACHE_SIZE = 4M
DB_16K_CACHE_SIZE = 16M
上面的设置说明了,在SGA中,SGA动态增长最多可以达到700M,其中实例启动时SHARE POOL的大小为80M,数据库标准块尺寸(缺省数据块大小)是8KB,如果用标准数据块(即,8KB)的对象时,将使用290M的高速缓存(DATA BUFFER),如果使用2K数据块尺寸的表空间内的对象时,可以使用4M的高速缓存,如果使用16K数据块尺寸的表空间内的对象时,可以使用16M的高速缓存。