日期:2014-05-16 浏览次数:20416 次
段概述
段(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)。所以当查询包含DISTINCT ,GROUP BY ,或 ORDER BY 子句时,Oracle有可能使用两个临时段。
临时表及索引使用的临时段
Oracle可以为临时表及其索引分配临时段。临时表中的数据只在会话或事务的运行期内存在。
临时段如何被分配
Oracle为查询(query)与临时表(temporary
table)分配临时段(temporary segment)的过程是不同的。
为查下分配临时段
在用户会话(session)期间,如果用户需要,Oracle可以在用户的临时表空间内为用户创建临时段。管理员可以使用 CREATE USER 或 ALTER USER 语句中的 TEMPORARY TABLESPACE 子句指定用户默认使用的临时表空间 。
TIPS:用户默认使用的永久表空间(permanent tablespace) 也可以同时被设定为(temporary tablespace)。
在字典管理模式下的表