常用语句:

select segement_name,segement_type from user_segement; 

Oracle中的段是占用磁盘物理空间的一个对象。尽管有多种段类型,常见的段类型如下:

  •      聚簇(cluster

这种段类型能存储表。有两种类型的聚簇:B*树聚簇和散列聚簇。聚簇通常用于存储多个表上的相关数据,将其“预连接”存储到同一个数据库块上;还可以用于存储一个表的相关信息。

  •     表(table

表段保存一个数据库表的数据,这可能是最常用的段类型,通常与索引段联合使用。

  •        表分区(table partition)或子分区(subpartition

这种段类型用于分区,与表段很相似。分区表由一个或多个表分区段组成,组合分区表则由一个或多个表子分区段组成。

  •        索引(index

这种段类型可以保存索引结构。

  •        索引分区(index partition

类似于表分区,这种段类型包含一个索引的某个片。分区索引由一个或多个索引分区段组成。

  •        lob分区(lob partition)、lob子分区(lob subpartition)、lob索引(lobindex)和lob段(lobsegment

lobindexlobsegment段保存大对象的结构。对包含LOB的表分区时,lobsegment也会分区,lob分区段正是用于此。并没有一种lobindex分区段类型,不论是出于什么原因,Oracle将分区lobindex标记为一个索引分区。

  •       嵌套表(nested table

这是为嵌套表指定的段类型,它是主/明细关系中一种特殊类型的“子”表。

  •        回滚段(rollback)和Type2 undo

undo数据就存在这里。回滚段是DBA手动创建的段。Type2 undo段由Oracle自动创建和管理。

 

一般建表,表本身是一个段,主键是一个段,大字段有两个段,一个存数据,一个组织结构。

 

  • 段的管理主要有两种:

  • 手动段空间管理(Manual Segment Space Management):由你设置FREELISTSFREELIST GROUPSPCTUSERD和其他参数来控制如何分配、使用和重用段中的空间。为了方便起见,将手动段空间管理简写为MSSM
  •    自动段空间管理(Automatic Segment Space ManagementASSM):你只需要控制与空间使用相关的一个参数:PCTFREE。创建段时可以接受其他参数,但是会被Oracle忽略。

基本上现在都是ASSM。

  • 高水位线(high-water markHWM

高水位线是一个很有趣的概念,但是也是一个非常重要的概念。顾名思义,高水位线有点类型于水文监测站里测水深的标杆一样,当水涨的时候,水位线随之上升,并在标杆留下一个水印痕,这个水印痕就是高水位线。但当水位降落的时候,当前水位也会在标杆上留下一个水印痕,这个并不是高水位线,学名叫低HWM


 

当表刚创建时,HWM位于表的第一个块中。过一段时间后,随着在这个表中放入数据,而且使用了越来越多的块,HWM会升高。但当我们删除了(delete)表中的一些(甚至全部)行,可能就会出现许多块不再包含数据,但仍然处于HWM之下,而且会一直保持在HWM之下。记住:HWM永远不会下降,除非使用rebuildtruncatedshrunk这个对象(shrinking10g的一个新特性,仅ASSM支持)。

HWM很重要,因为Oracle在全表扫描时会扫描HWM之下的所有块,即使其中不包括任何数据。这会影响full scan的性能,特别是当HWM之下的绝大多数块都为空时。