ora-3237

来源:互联网 发布:python决策树结构 编辑:程序博客网 时间:2024/06/07 03:07
> oerr ora 3237
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

原创粉丝点击