转载

oracle11g之create table存储参数minextents和maxextents含义之系列四

背景

  创建表时不止可以指定initial和next,也可以指定minextents,或者maxextents;
本文主要熟悉下minextents及maxextents参数的含义及作用 


结论

   1,基于本地管理表空间,minextents是在表级别指定分配多少个区
     这样就可以控制初始表段的大小
   2,基于本地管理表空间,不能使用ALTER变更表的minextents
   3,minextents及maxextents仅能在表级别定义,不适用于表空间级别
   4,maxextents仅适用于字典管理表空间,指定最大为表段分配多少个区
   5,要创建一个字典管理的表空间,SYSTEM表空间必须是字典管理模式,而SYSTEM表空间不能由本地管理转换为字典管理模式


测试

1,数据库版本
SQL> select * from v$version where rownum=1;


BANNER
----------------------------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production


2,在本地管理的表空间下创建测试表,建表采用默认的参数值


SQL> select tablespace_name,initial_extent,next_extent,extent_management,allocation_type,segment_space_management from user_tablespaces where tablespace_name='USERS';


TABLESPACE_NAME                INITIAL_EXTENT NEXT_EXTENT EXTENT_MANAGEMENT    ALLOCATION_TYPE    SEGMENT_SPAC
------------------------------ -------------- ----------- -------------------- ------------------ ------------
USERS                                   65536             LOCAL                SYSTEM             AUTO




SQL> create table t_min_extents(a int,b int);


Table created.


SQL> insert into t_min_extents values(1,1);


1 row created.


SQL> commit;


Commit complete.


3,可见建表采用默值值时,min_extents为1,此参数含义为控制创建表段最少要创建多少个区
SQL> select segment_name,extents,min_extents from user_segments where lower(segment_name)='t_min_extents';


SEGMENT_NAME                      EXTENTS MIN_EXTENTS
------------------------------ ---------- -----------
T_MIN_EXTENTS                           1           1


SQL> select count(*) from user_extents where lower(segment_name)='t_min_extents';


  COUNT(*)
----------
         1




 4,如果显式指定minextents,测试表插入数据时分最少分配多少个区,可见minextents指定初始分配多少个区
 SQL> drop table t_min_extents purge;


Table dropped.


SQL> create table t_min_extents(a int,b int) storage(minextents 3);


Table created.


SQL> insert into t_min_extents values(1,1);


1 row created.


SQL> commit;


Commit complete.


SQL> select count(*) from user_extents where lower(segment_name)='t_min_extents';


  COUNT(*)
----------
         3        




5,再看下minextents与其它参数的一些关系,从官方文档发现,基于本地管理表空间,ORACLE使用minextents以及initial,next,pctincrease决定表段的初始大小
而显式指定minextents相当于配置initial*minextents,这个就是初始表段的大小


SQL> select segment_name,bytes/1024/1024 segment_mb,blocks,initial_extent,next_extent,min_extents from user_segments where lower(segment_name)='t_min_extents';


SEGMENT_NAME                   SEGMENT_MB     BLOCKS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS
------------------------------ ---------- ---------- -------------- ----------- -----------
T_MIN_EXTENTS                           3        384        2162688     1048576           1




6,minextents官方文档说不适用于表空间级别,如果是本地管理表空间,不能使用alter变更表的minextents


SQL> alter table t_min_extents  storage(minextents 5);
alter table t_min_extents  storage(minextents 5)
*
ERROR at line 1:
ORA-25150: ALTERING of extent parameters not permitted




SQL> host oerr ora 25150
25150, 00000, "ALTERING of extent parameters not permitted"
// *Cause: An attempt was made to alter the extent parameters for a segment
//         in a tablespace with autoallocate or uniform extent allocation
//         policy.
// *Action: Remove the appropriate extent parameters from the command.


SQL> 


7,maxextents参数作用类似于minextents,此参数指定段最大可以分配多少个区,此参数仅适用于字典管理表空间,而在本地管理表空间,会忽略此参数
SQL> drop table t_min_extents purge;


Table dropped.


SQL> create table t_extents(a int,b int) storage(minextents 4 maxextents 6);


Table created.


SQL> select segment_name,extents,min_extents from user_segments where lower(segment_name)='t_extents';


no rows selected


SQL> insert into t_extents values(1,1);


1 row created.


SQL> commit;


Commit complete.


SQL> select segment_name,extents,min_extents from user_segments where lower(segment_name)='t_extents';


SEGMENT_NAME                      EXTENTS MIN_EXTENTS
------------------------------ ---------- -----------
T_EXTENTS                               4           1


SQL> select segment_name,extents,min_extents,max_extents from user_segments where lower(segment_name)='t_extents';


SEGMENT_NAME                      EXTENTS MIN_EXTENTS MAX_EXTENTS
------------------------------ ---------- ----------- -----------
T_EXTENTS                               4           1  2147483645


SQL> 




SQL> insert into t_extents select level,level from  dual connect by level<=1000000;


1000000 rows created.


SQL> commit;


Commit complete.


虽显式指定maxextents为6,实际会忽略此参数配置
SQL> select count(*) from t_extents;


  COUNT(*)
----------
   1000001


8,要创建字典管理的表空间,SYSTEM表空间必须是字典管理模式,而SYSTEM表空间不能转换为字典管理模式,所以没有办法
SQL> create tablespace tbs_dict datafile '/oracle/oradata/guowang/dict1.dbf' size 30m autoextend on extent management dictionary;
create tablespace tbs_dict datafile '/oracle/oradata/guowang/dict1.dbf' size 30m autoextend on extent management dictionary
*
ERROR at line 1:
ORA-12913: Cannot create dictionary managed tablespace




SQL> host oerr ora 12913
12913, 00000, "Cannot create dictionary managed tablespace"
// *Cause: Attemp to create dictionary managed tablespace in database 
//         which has system tablespace as locally managed
// *Action: Create a locally managed tablespace. 


create tablespace tbs_dict datafile '/oracle/oradata/guowang/dict1.dbf' size 30m autoextend on extent management dictionary;

个人简介


8年oracle从业经验,具备丰富的oracle技能,目前在国内北京某专业oracle服务公司从事高级技术顾问。
服务过的客户:
中国电信
中国移动
中国联通
中国电通
国家电网
四川达州商业银行
湖南老百姓大药房
山西省公安厅
中国邮政
北京302医院     
河北廊坊新奥集团公司

 项目经验:
中国电信3G项目AAA系统数据库部署及优化
      中国联通4G数据库性能分析与优化
中国联通CRM数据库性能优化
中国移动10086电商平台数据库部署及优化
湖南老百姓大药房ERR数据库sql优化项目
四川达州商业银行TCBS核心业务系统数据库模型设计和RAC部署及优化
四川达州商业银行TCBS核心业务系统后端批处理存储过程功能模块编写及优化
北京高铁信号监控系统RAC数据库部署及优化
河南宇通客车数据库性能优化
中国电信电商平台核心采购模块表模型设计及优化
中国邮政储蓄系统数据库性能优化及sql优化
北京302医院数据库迁移实施
河北廊坊新奥data guard部署及优化
山西公安厅身份证审计数据库系统故障评估
国家电网上海灾备项目4 node rac+adg 
       贵州移动crm及客服数据库性能优化项目
       贵州移动crm及客服务数据库sql审核项目
       深圳穆迪软件有限公司数据库性能优化项目

联系方式:
手机:18201115468
qq   :   305076427
qq微博: wisdomone1
新浪微博:wisdomone9
qq群:275813900    
itpub博客名称:wisdomone1    http://blog.itpub.net/9240380/



正文到此结束
Loading...