oracle11g之create table儲存引數minextents和maxextents含義之系列四

wisdomone1發表於2015-10-18

背景

  建立表時不止可以指定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/



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-1814746/,如需轉載,請註明出處,否則將追究法律責任。

相關文章