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

OracleDBA之路Storage Structure(一)

存储结构
Database--->tablespace--->datafile-->segments--->extents-->Oracle Data BLOCKS

segment是Oracle database 内占用空间的对象。它们使用数据库中数据文件内的空间。本部分介绍不同类型的segment。

1表table:
表是在数据库内存储数据的最常用方法。table segment用于存储非集群且未分区的表中的数据。table segment中的数据并不按特定顺序存储,因此,数据库管理员(DBA) 很难控制表中块内行的位置。 table segment中的所有数据都必须存储在一个表空间内。

2表分区table partition:

? 当数据库内表的并发使用率很高时,主要关注点将是伸缩性和可用性。在这种情况下,table 内数据可以存储在几个分区内,每个分区驻留在不同的表空间。Oracle 服务器当前支持通 过键值范围、散列算法以及值列表来分区。表分区后,每个分区都是一个segments,可以指定存储参数单独对它们进行控制。使用这种类型的segments需要在Oracle9i 企业版内选择分区选件。

3Cluster:

Cluster与table一样,是一种数据segments类型。cluster内的行是基于键列值存储的。一个簇可以包含一个或 多个表。一个簇内的表属于同一个segments并且共享相同的存储特性。可以通过索引或者散列算 法来访问集簇表内的行。

4索引Index:

一个特定索引的所有条目都存储在一个索引segments内。如果一个表有三个索引,则使用三个索引segments。使用索引segments的目的是根据指定的关键字来查找行在表内的位置。

5按索引组织的表index-organized table:
在按索引组织的表内,数据基于键值存储在索引内。按索引组织的表无需在表中进行查找,因为所有数据都可以直接从索引树中检索到。

6索引分区index partition:

索引可以分区并跨多个表空间。在这种情况下,索引内每个分区都对应一个segments并且无法跨 越多个表空间。分区索引的主要用途在于,通过分散索引输入/输出(I/O) 来最大限度地降低争用。使用这种类型的segments需要在Oracle9i 企业版内选择分区(Partitioning) 选件。

7undo segment:

undo segment由正在对数据库进行更改的事务处理使用。在更改数据或者索引块之前,旧值存储在undo segment内。因此,允许用户还原所做的更改。

8temporary segment:
? 当用户执行CREATE INDEX、SELECT DISTINCT和? SELECT GROUP BY等命令时,Oracle 服务器就会在内存中执行排序。如果排序所需空间大于内存中的可用空间,则将中间结果写入到磁盘上。temporary segment用来存储这些中间结果。

9LOB segment:

表中的一列或者多列可以用来存储大型对象(LOB),如文本文档、图像或者视频。如果列 很大,Oracle 服务器将把这些值存储在独立的segments(称为“LOB segments”)中。表中只包含一个定 位器或者指针,指向对应的LOB 数据所在的位置。

10嵌套表Mested table:

表中的列可以由用户定义的表构成,如订单中的项。在这种情况下,内表(即嵌套表)将 存储为独立的segment。

11Bootstrap segment:

?Bootstrap segment,也称为高速缓存segment,是在创建数据库时由sql.bsq 脚本创建。在例程打开数据 库时,该segments可帮助初始化数据字典高速缓存引导程序segments无法查询或者更新,并且不需要数据库管理员维护。