段的创建表user_segments
来源:互联网 发布:软件后缀名 编辑:程序博客网 时间:2024/04/28 21:57
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 DEFAULT
11gR2:
test@IRMSDC2> create table t(idnumber); Table created. test@IRMSDC2> select * from user_segments; no rows selected test@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 2147483645 DEFAULTDEFAULT 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 DEFAULTT2 TABLE USERS 65536 8 1 65536 1 2147483645 DEFAULTSYS_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 1T2 TABLE USERS 65536 8 1SYS_C00326438 INDEX USERS 65536 8 1T3 TABLE USERS 65536 8 1SYS_LOB0000469684C00002$$ LOBSEGMENT USERS 65536 8 1SYS_IL0000469684C00002$$ LOBINDEX USERS 65536 8 1SYS_LOB0000469684C00003$$ LOBSEGMENT USERS 65536 8 1SYS_IL0000469684C00003$$ LOBINDEX USERS 65536 8 1SYS_C00326439 INDEX USERS 65536 8 1 9 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 sysdbaConnected.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 3T2 TABLE USERS 65536 8 1SYS_C00326438 INDEX USERS 65536 8 1T3 TABLE USERS 65536 8 1SYS_LOB0000469684C00002$$ LOBSEGMENT USERS 65536 8 1SYS_IL0000469684C00002$$ LOBINDEX USERS 65536 8 1SYS_LOB0000469684C00003$$ LOBSEGMENT USERS 65536 8 1SYS_IL0000469684C00003$$ LOBINDEX USERS 65536 8 1SYS_C00326439 INDEX USERS 65536 8 1 9 rows selected.
可见,区增长为3个,block增长到24个,即段占用空间为24*8K。
注:字典/本地表空间管理决定了如何把空间分配给各个表,而ASSM/MSSM决定了如何把表已经拥有的空间分配给各行,以及如何管理各个区、块,如通过PCTFREE指定每个块应该预留多少空间用于将来的更新。- 段的创建表user_segments
- 段的创建表user_segments
- 段的创建表user_segments
- 段和区:USER_SEGMENTS 和USER_EXTENTS
- 用oracle的关键字作为表字段创建新表
- 延迟段创建的学习-实验
- 关于PE文件新区段的创建
- 分析建/删表时自动创建的段
- sublime之创建可复用的代码段
- oracle USER_SEGMENTS 和USER_EXTENTS
- user_segments和user_objects
- user_segments和user_objects
- hibernate动态创建表,修改表字段
- hibernate动态创建表,修改表字段
- 延迟段创建 无法导出表
- 创建表时控制段延迟分配
- oracle-11g延迟段创建特性导致的一些表不能正常导出导入
- 两段创建
- Oracle 字符集的查看和修改
- 在shell脚本中调用sqlplus
- 程序员学习编程需要攻克的8个障碍
- 定位导致物化视图无法快速刷新的原因
- android多分辨率多密度下界面适配方案
- 段的创建表user_segments
- POI操作Excel常用方法总结
- ETL概述
- 三大主流ETL工具选型
- 用IBM WebSphere DataStage进行数据整合: 第 1 部分
- adb常用命令
- 如何解决安卓SDK无法下载Package的问题
- 事件处理之二:点击事件监听器的五种写法
- 社説 20150617 福島復興新指針 自立への転換点が示された