03237, 00000, "Initial Extent of specified size cannot be allocated in tablespace (%s)"
// *Cause: Too large a size for an initial extent due to freelist
// group specification
// *Action: Reduce number of freelist groups specified for segment
这个错误的具体原因,是因为表空间的minimum extent大小小于4*db_block_size。
例如,如果我们的db_block_size为16K,如下:
SQL> show parameter db_block
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_buffers integer0
db_block_checking stringFALSE
db_block_checksum stringTYPICAL
db_block_size integer16384
这个时候,我建了一个temp表空间,如下:
create temporary tablespace temp tempfile '+TEST_DATA_DG' size 2G autoextend on extent management local uniform size 32k
那么,这个时候当使用到temp表空间时,就会出现ora-03237错误。这里只是用temp表空间举例,永久表空间也是一样。
解决方法,如果是临时表空间,只能drop掉使用正确的size重新创建。如果是永久表空间,可以使用alter tablespace ...minimum extent 64k 来修改extent大小。
最后附上mos上的解释:
ORA-3237 Creating Certain Objects In Locally Managed Tablespace (Doc ID 116310.1)
Problem Description
-------------------
You try to create a table with a LOB column in a locally managed tablespace and
get the following error:
ORA-3237 "Initial Extent of specified size cannot be allocated"
// *Cause: Too large a size for an initial extent due to freelist
// group specification
// *Action: Reduce number of freelist groups specified for segment
OR
You are trying to create a rollback segment in a locally managed tablespace and
get the ORA-3237.
OR
You are trying to set up Intermedia (i.e. there are objects with LOB columns
dr$stat for example) and you get the ORA-3237
Solution Description
--------------------
You need to ensure that the extent size specification in the tablespace is
at least four times the db_block_size.
i.e:
create tablespace local_t1
datafile 'path/filename.dbf' size 20M
extent management local uniform size N;
*** where N = 4*db_block_size ***
The problem is due to the extent size specified in the tablespace.
SQL> create tablespace local_t1
2 datafile '/oracle10/local_t1/dbf' size 20m
3 extent management local uniform size 16k;
SQL> create table temp (a1 blob) tablespace local_t1;
This generates the ORA-3237 if the db_block_size is >= 8K.
Explanation
-----------
Whilst Oracle enforces the a minimum uniform extent size of two database blocks,
other objects may require larger extents than this, either by virtue of how they
are built internally (i.e. an RBS requires at least four blocks and a LOB at
least three) or by virtue of their storage specification when being created.
References
----------
Bug:1186625 ORA-3237 WHEN TRYING TO CREATE AN OBJECT IN A LOCALLY MANAGED
TABLESPACE
Additional Search Words
-----------------------
rollback segment uniform extent locally managed tablespace
BLOB CLOB LOB dr$stat