标准数据块的大小被用于系统和临时表空间,除非有特别的说明,除非有特别的说明,标准数据块的大小也被用作一个表空间的数据块的默认值。数据库中标准数据块的大小是在数据库创建时使db_blcok_size初始化参数设置的,若要改变这一设置就需要重建数据库。在Oracle9i或以上的版本中,每个Oracle数据库中除了标准数据块之外还支持最多4中不同大小的数据块。
一般将最常用的数据块大小选为标准数据块的大小,在大多数情况下,这也是唯一需要说明的数据块大小,在多数情况下,db_block_size被设置为4k或8k。如果没有说明,默认数据块的大小与操作系统相关的。
db_cache_size说明了默认高速缓存的大小。它的最小尺寸为一个granule(4mb or 16mb)默认值为48mb.该高速缓存的数据块的大小为标准数据块的大小,由db_block_size所定义。
使用高速缓存初始化参数来定义SGA中高速缓存的大小,如果要在一个数据库中使用多个数据块,就必须定义db_cache_size和至少一个DB_nk_cache_size参数。可以使用以下的动态参数配置额外的非标准块的高速缓存。
*db_2k_cache_size:用于2kb数据块
*db_4k_cache_size:用于4kb数据块
*db_8k_cache_size:用于8kb数据块
*db_16k_cache_size:用于16kb数据块
*db_32k_cache_size:用于32kb数据块
以上每个参数定义了所对应数据块的高速缓存的大小。db_nk_cache_size的默认值为0.如果在数据库中有任何数据块大小为nKB的联机表空间存在,就不可以将db_nk_cache_size置为0.如果nk是标准快的大小,则db_nk_cache_size被禁止。每个而高速缓存区的最小尺寸为一个granule。
数据块大小还受到IT平台的一些限制。如所使用的IT平台上最小块的尺寸为2KB,就不能设置DB_2k_CACHE_SIZE,如果所使用的IT平台的最大快的尺寸为32KB,也不能设置为db_32k_cache_size
.
使用多种数据块尺寸的原则如下:
*一个分区对象的所有分区必须存在相同块尺寸的表空间中。
*所有临时表空间,包括默认的临时表空间的永久表空间必须是标准块尺寸。
*Index_organized表的overflow和out-of-line LOB段可以存在于基表不同块大小的表空间中。
那么怎么创建非标准块尺寸的表空间。可以通过在create tablespace 语句中使用bolocksize nk或block n 子句来创建非标准尺寸的表空间。这里n为正整数,单位为字节,如果使用了后缀k,单位为k字节。
为了使用这一子句,必须首先设置db_cache_size和至少一个db_nk_cache_size参数。而且该子句中的正整数n也必须与对应的db_nk_cache_size参数中的正整数n相同。
SQL> select tablespace_name,blocK_size,status,contents from dba_tablespaces;
TABLESPACE_NAME BLOCK_SIZE STATUS CONTENTS
--------------- ---------- --------- ---------
SYSTEM 8192 ONLINE PERMANENT
UNDOTBS1 8192 ONLINE UNDO
SYSAUX 8192 ONLINE PERMANENT
TEMP 8192 ONLINE TEMPORARY
USERS 8192 ONLINE PERMANENT
TEST 8192 READ ONLY PERMANENT
6 rows selected.
查询得出:每个表空间都是8kb