日期:2014-05-16  浏览次数:20410 次

Oracle段的概念总结(原创)

段概述

段(segment)由一组数据扩展(extent)构成,其中存储了表空间内各种逻辑存储结构的数据。例如,Oracle能为每个表的数据段(data segment)分配数据扩展,还能为每个索引的索引段(index segment)分配数据扩展。

数据段简介

在Oracle数据库中,一个数据段可以供以下方案对象(或方案对象的一部分)容纳数据:

1、非分区表或非簇表

2、分区表的一个分区

3、一个簇表

当用户使用CREATE 语句创建表或簇表时,Oracle创建相应的数据段。表或簇表的存储参 数(storage parameter)用来决定对应数据段的数据扩展如何被分配。用户可以使用 CREATE 或ALTER语句直接设定这些存储参数。这些参数将会影响与方案对象(object)相关的数据段的存储与访问效率。

索引段

Oracle 数据库中每个非分区索引(nonpartitioned index)使用一个索引段(index segment)来容纳其数据。而对于分区索引(partitioned index),每个分区使用一个索引段来容纳其数据。

用户可以使用CREATE INDEX语句为索引或索引的分区创建索引段。在创建语句中,用户可以设定索引段的数据扩展(extent)的存储参数(storage parameter)以及此索引段应存储在哪个表空间中。(表的数据段和与其相关的索引段不一定要存储在同一表空间中。)索引段的存储参数将会影响数据的存储与访问效率。

临时段简介

当Oracle处理一个查询时,经常需要为SQL语句的解析与执行的中间结果(intermediate stage)准备临时空间。Oracle会自动地分配被称为临时段 (temporary segment)的磁盘空间。例如,Oracle在进行排序操作时就需要使用临时段。当排序操作可以在内存中执行,或Oracle设法利用索引就执行时,就不必创建临时段。

需要使用临时段的操作:

1、CREATE INDEX

2、SELECT ... ORDER BY

3、SELECT DISTINCT ...

4、SELECT ... GROUP BY

5、SELECT . . . UNION

6、SELECT ... INTERSECT

7、SELECT ... MINUS

有些不能使用索引的关联操作(unindexed join),或者需要在子查询间建立相互关系(correlated subqueries),也可能需要使用临时段(temporary segment)。所以当查询包含DISTINCTGROUP BY ,或 ORDER BY 子句时,Oracle有可能使用两个临时段。

临时表及索引使用的临时段

Oracle可以为临时表及其索引分配临时段。临时表中的数据只在会话或事务的运行期内存在。

临时段如何被分配
Oracle为查询(query)与临时表(temporary table)分配临时段(temporary segment)的过程是不同的。

为查下分配临时段

在用户会话(session)期间,如果用户需要,Oracle可以在用户的临时表空间内为用户创建临时段。管理员可以使用 CREATE USERALTER USER 语句中的 TEMPORARY TABLESPACE 子句指定用户默认使用的临时表空间

TIPS:用户默认使用的永久表空间(permanent tablespace) 也可以同时被设定为(temporary tablespace)。

在字典管理模式下的表