1.查看当前的数据库大小
SYS@orcl> show parameter db_block_size
NAME TYPE VALUE
--------------------- -------------------- -------------------
db_block_size integer 8192
SYS@orcl> show parameter db_16k_cache_size
NAME TYPE VALUE
--------------------- -------------------- -------------------
db_16k_cache_size big integer 0
该参数默认值为0,表示未启用。
3.创建数据库高速缓存区
SYS@orcl> alter system set db_16k_cache_size=1M scope=both;
System altered.
SYS@orcl> show parameter db_16k_cache_size
NAME TYPE VALUE
-------------------- -------------------- --------------------
db_16k_cache_size big integer 32M
即使修改时指定的是1M,修改之后系统会自动给出一个最小的32M大小。
4.添加数据库块为16K的非标准块表空间
在前期准备工作完成的情况下,我们便可以使用“blocksize 16k”参数完成表空间的创建。
SYS@orcl> create tablespace DATA01 datafile '+data' size 256M uniform size 4M
blocksize 16K;
[ UNIFORM 就是这个表空间中所有的区间都是同样的大小,好处是防止碎片 ]
DBMS_METADATA.GET_DDL('TABLESPACE','DATA01')
---------------------------------------------------------------------
CREATE TABLESPACE "DATA01" DATAFILE
SIZE 163577856
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 4194304 DEFAULT
NOCOMPRESS SEGMENT SPACE MANAGEMENT AUTO
5.未对db_16k_cache_size参数进行设置的ORA-29339报错信息
如果在创建表空间之前没有对db_16k_cache_size参数进行调整,将会收到如下ORA-29339报错。
SYS@orcl>create tablespace DATA01 datafile '+data' size 256M uniform size 4M
blocksize 16K;
create tablespace DATA01 datafile '+data' size 256M uniform size 4M
blocksize 16K;
*ERROR at line 1:
ORA-29339: tablespace block size 16384 does not match configured block sizes
6.小结
本着特殊问题特殊处理的原则,创建非系统默认的表空间需要事先做一些微小的调整。
另外注意,当同一套数据库系统中存在数据块大小不同的表空间的时候,维护上需要更多的关照。充分评估,不要增加不必要的负担。
7.为表空间定制块尺寸的好处
· 优化磁盘I/O:Oracle服务器必须把需要处理的表数据从物理磁盘读取到告诉缓冲区高速缓存中。
如果表行过长,最好使用更大的块尺寸,这样,每次读取的数据将多于从较小的块中读取
的数据,而且还减少了获得相同数据量所进行的读取操作数。
· 优化数据高速缓存:Oracle针对不同的块尺寸提供不同的池,这样做可以更好地利用Oracle的内存。
· 更易于表空间的传送:如果拥有多个块尺寸的表空间,则很容易使用Oracle的“传送表空间”特性