发表于: 2006.09.08 17:02
分类: ORACLE , Bug
出处: http://yangtingkun.itpub.net/post/468/201214
---------------------------------------------------------------
今天同事问我一个错误,错误号ORA-03232,在9i的错误参考文档中,居然没有找到,刚开始还认为是10g的错误,后来才发现原来是8i上的错误。
好长时间没有接触Oracle8i的数据库,正好把错误解决过程记录下来,留做备忘。
由于是远程指导操作,很多信息没有得到。同事告诉我的错误信息为:ORA-03232,错误描述是:无法分配 9 块 (源于表空间 3) 的区。
由于手头没有8i的文档可查,根据个人感觉似乎是表空间不足,通过判断错误应该发生在TEMP表空间。
而且,数据库分配给TEMP表空间的数据文件大小只有1G,因此凭感觉就给TEMP表空间增加了1G的空间。
但是问题仍然存在,通过查询文档才发现,不是空间不够用,而是Oracle在分配空间是出的问题:
ORA-3232: unable to allocate an extent of %s blocks from tablespace %s
Cause: An attempt was made to specify a HASH_MULTIBLOCK_IO_COUNT value that
is greater than the tablespace's NEXT value
Action: Increase the value of NEXT for the tablespace using ALTER TABLESPACE
DEFAULT STORAGE or decrease the value of HASH_MULTIBLOCK_IO_COUNT.
看来是由于临时表空间的NEXT参数小于了HASH_MULTIBLOCK_IO_COUNT*DB_BLOCK_SIZE的值造成的。
而HASH_MULTIBLOCK_IO_COUNT的值是0,说明Oracle自动计算每次需要使用的值。
知道了问题的原因,解决到也不麻烦,一个是将HASH_MULTIBLOCK_IO_COUNT设置为非0值,且小于NEXT参数的设置,另一中方法是增大TEMP表空间的NEXT默认存储参数。
于是,运行SQL:ALTER TABLESPACE TEMP DEFAULT STORAGE (NEXT 512K)后,问题解决。
在9i及以上版本,废除了HASH_MULTIBLOCK_IO_COUNT这个初始化参数,因此这个错误也不会发生了。











