段的创建表user_segments
1、段的定義及類型
Oracle中的段(segment)是占用磁盤空間的一個對象,最常見的段類型包括:
l? 聚簇cluster
l? 表table
l? 表分區 tablepartition
l? 索引 index
l? 索引分區
l? Lob分區lob partition、lob子分區lobsubpartition、lob索引lobindex、lob段lob segmnent
l? 嵌套表 nestedtable
l? 回滾段rollback
詳細介紹可見《編程藝術》P313
2、段的創建
在表、索引等創建的過程中(在11gR2中,段的創建要等到第一條數據被插入時),事實上即在創建段,從user_segment可以查看已創建的段
(1)創建一個基本表,查看所分配的段
10.2.0.4:
SQL> create table t(id number);Table created.SQL> select * from user_segments;SEGMENT_NAME PARTITION_NAME SEGMENT_TYPE TABLESPACE_NAME BYTES BLOCKS EXTENTS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE FREELISTS FREELIST_GROUPS BUFFER_ T TABLE USERS 65536 8 1 65536 1 2147483645 DEFAULT11gR2:
test@IRMSDC2> create table t(idnumber);Table created.test@IRMSDC2> select * from user_segments;no rows selectedtest@IRMSDC2> insert into t(id)values(1);1 row created.test@IRMSDC2> select * fromuser_segments;SEGMENT_NAME PARTITION_NAME SEGMENT_TYPE SEGMENT_SUTABLESPACE_NAME BYTES BLOCKS EXTENTS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS MAX_SIZE RETENTI MINRETENTION --------------------------------------------------------------------------------------------------------------- ------------------ ---------------------------------------- ---------- ---------- ---------- ------------------------- ----------- ----------- ---------- ------- ------------ PCT_INCREASE FREELISTS FREELIST_GROUPS BUFFER_ FLASH_CCELL_FL ------------ ---------- ---------------------- ------- ------- T TABLE ASSM USERS 65536 8 1 65536 1048576 1 2147483645 2147483645DEFAULTDEFAULT DEFAULT由此可見,在11gR2中,只有插入數據后才會分配段空間。以下操作均在10g中進行,在11g中只要插入一條數據或者在創建表時指定segment creation immediate即可得到相同效果。
(2)創建一個帶主鍵的表,查看所分配的段?
SQL> create table t2(id numberprimary key);Table created.SQL> select * fromuser_segments; SEGMENT_NAME PARTITION_NAME SEGMENT_TYPE TABLESPACE_NAME BYTES BLOCKS EXTENTS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE FREELISTS FREELIST_GROUPS BUFFER_ --------------------------------------------------------------------------------------------------------------- ------------------------------------------------ ---------- ---------- ---------- ------------------------- ----------- ----------- ------------ ---------- ---------------------- T TABLE USERS 65536 8 1 65536 1 2147483645 DEFAULT T2 TABLE USERS 65536 8 1 65536 1 2147483645 DEFAULT SYS_C00326438 INDEX USERS 65536 8 1 65536 1 2147483645 DEFAULT(3)創建一個有lob字段的表,查看所分配的段
SQL> createtable t3(x int primary key, y clob, z blob);Table created. SQL> select segment_name,segment_type,tablespace_name,bytes,blocks,extents from user_segments; SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME BYTES BLOCKS EXTENTS ------------------------------------------------ ------------------------------ ---------- -------------------- T TABLE USERS 65536 8 1 T2 TABLE USERS 65536 8 1 SYS_C00326438 INDEX USERS 65536 8 1 T3 TABLE USERS 65536 8 1 SYS_LOB0000469684C00002$$ LOBSEGMENT USERS 65536 8 1 SYS_IL0000469684C00002$$ LOBINDEX USERS 65536 8 1 SYS_LOB0000469684C00003$$ LOBSEGMENT USERS 65536 8 1 SYS_IL0000469684C00003$$ LOBINDEX USERS 65536 8 1 SYS_C00326439 INDEX USERS 65536 8 19 rowsselected.由此可見,t只創建一個表的段,t2創建了一個表段以及一個索引段,t3創建了一個表段、一個索引段、2個lobindex,2個lobsegment。
結論:創建一個表時,表的信息及數據可能會分散到多個段之中,每個段保存著一部分信息,而段由區組成,區由oracle塊組成,oracle塊由操作系統組成。
創建一個新段時,默認由1個區、8個塊組成,共計8K*8空間,默認情況下oracle塊大小為8k.
SQL> show parameter block_size;NAME TYPE VALUE ------------------------------------------------------------------ ------------------------------ db_block_size integer 8192(4)插入大量數據
在表t中插入大量數據,觀察段大小的變化
SQL> conn / as sysdba Connected. SQL> INSERT INTO test.t SELECT ROWNUMFROM dba_TABLES WHERE ROWNUM <= 10000;10000 rows created.SQL> conn test/test_123; Connected. SQL> selectsegment_name, segment_type,tablespace_name,bytes,blocks,extents fromuser_segments;SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME BYTES BLOCKS EXTENTS ------------------------------------------------ ------------------------------ ---------- -------------------- T TABLE USERS 196608 24 3 T2 TABLE USERS 65536 8 1 SYS_C00326438 INDEX USERS 65536 8 1 T3 TABLE USERS 65536 8 1 SYS_LOB0000469684C00002$$ LOBSEGMENT USERS 65536 8 1 SYS_IL0000469684C00002$$ LOBINDEX USERS 65536 8 1 SYS_LOB0000469684C00003$$ LOBSEGMENT USERS 65536 8 1 SYS_IL0000469684C00003$$ LOBINDEX USERS 65536 8 1 SYS_C00326439 INDEX USERS 65536 8 19 rows selected.
可見,區增長為3個,block增長到24個,即段占用空間為24*8K。
注:字典/本地表空間管理決定了如何把空間分配給各個表,而ASSM/MSSM決定了如何把表已經擁有的空間分配給各行,以及如何管理各個區、塊,如通過PCTFREE指定每個塊應該預留多少空間用于將來的更新。 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的段的创建表user_segments的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 定位导致物化视图无法快速刷新的原因
- 下一篇: POI操作Excel常用方法总结