创建非标准块的表空间

在默认情况下创建的数据库块大小是由db_block_size参数决定的,一般默认是8k,即8192。db_block_size参数在建库时设置好后,就无法更改。这时候如果我们想要创建16k的表空间用来存放索引,那又该怎么办呢?

DB_BLOCK_SIZE参数

db_block_size是指定一个Oracle DB块的大小(字节)。此值是在创建数据库时设置的,此后不可更改。此值指定了数据库的标准块大小。所有表空间默认情况下将使用该大小。取值范围:2048到32768(与操作系统相关),即32位操作系统,最大为16k,64位系统最大为32k。默认值:8192 。

表空间的数据文件容量的大小是由db_block_size决定的。

smallfile tablespace的数据文件最大值为 4194304×DB_BLOCK_SIZE/1024M。
即:
4k最大数据文件为:16384M=16G
8K最大数据文件为:32768M=32G
16k最大数据文件为:65536M=64G
32K最大数据文件为:131072M=128G

DB_nK_CACHE_SIZE参数

Oracle是可以配置Multiple Block Sizes的

如果要配置Multiple Block Sizes,就要配置db_nk_cache_size参数,这些参数默认值都是 0。

db_nk_cache_size参数指定nK的buffer,在指定cache时,要确保有足够的空间。而且不能和db_block_siez参数冲突,n的取值范围是2、4、8、16、32 。

实验:

我们这里以16k为例

1. 查看db_block_siez

2. 查看系统位数

结果大于0,说明支持64位计算。

3. 查看db_16k_cache_size参数的默认值

该参数默认值为0,表示未启用。

4. 创建数据库高速缓存区

即使在这里指定1M了,但是系统还是使用了默认的最小值,取值的范围官方文档有说明:
Minimum: 0 (values greater than zero are automatically modified to be either the granule size * number of processor groups, or 4 MB * number of CPUs, whichever is greater)
Maximum: operating system-dependent

5. 创建16k的非标准块表空间

验证:如果创建未启用对应的Cache buffer会有什么结果,且创建和db_block_siez一样的值表空间。

在创建非db_block_size 标准的表空间时,必须先设置对应的DB_nK_CACHE_SIZE 参数来创建nK 的buffer,不然会报:

ORA-29339: tablespace block size 4096 does not matchconfigured block sizes

使用和db_block_siez一样值来创建表空间也是可以的,其实就等于是默认参数。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.