
1 段(Segment)
1.1 数据段概述
数据库中的表在表空间中都由一块单独的磁盘空间区域,称之为段。每一段依次在表空间中有一块初始的磁盘空间区域,成为初始盘区。当段使用完对应的空间时,磁盘空间的另一个单独区域——下一盘区将被启用。如果这一块区域也被使用完,那么还有另一盘区被启用。这个过程会跟随每一个表持续执行,直到整个表空间填充满为止。
数据库中的表由一个或多个的段组成,而普通表由一个段组成,分区表则由多个段组成
段是由多个数据区构成的,它是为特定的数据库对象(如表段、索引段、回滚段、临时段)分配的一系列数据区。段内包含的数据区可以不连续,并且可以跨越多个文件。使用段的目的是用来保存特定对象。

数据段是与数据库对象相对应,一般一个数据库对象对应一个数据段。
多个extent是对应一个数据段,每个数据段实际上就是数据库一个对象的代表。
一般来说, 当创建一个对象时(表,索引),就会分配一个段给这个对象.
一个Oracle数据库有4种类型的段:
- 数据段:数据段也称为表段,它包含数据并且与表和簇相关。当创建一个表时,系统自动创建一个以该表的名字命名的数据段。
- 索引段:包含了用于提高系统性能的索引。一旦建立索引,系统自动创建一个以该索引的名字命名的索引段。
- 回滚段:包含了回滚信息,并在数据库恢复期间使用,以便为数据库提供读入一致性和回滚未提交的事务,即用来回滚事务的数据空间。当一个事务开始处理时,系统为之分配回滚段,回滚段可以动态创建和撤销。系统有个默认的回滚段,其管理方式既可以是自动的,也可以是手工的。
- 临时段:它是Oracle在运行过程中自行创建的段。当一个SQL语句需要临时工作区时,由Oracle建立临时段。一旦语句执行完毕,临时段的区间便退回给系统。
从dba_segments、user_segments视图中,可以比较清楚看清数据段的结构。

1.2 用户段
单个数据段存储一个用户对象(user object)的数据。用户段(user segment)的例子包括:
- 表、表分区、表集群;
- LOB或LOB分区;
- 索引或索引分区。
Lob(Large Object)是Oracle专门用来处理半结构化和非结构化数据,它是一个大对象数据类型,可以存储超过4000字节的字符串、二进制数据。
每个未分区的对象以及对象分区都存储在自己的段中。比如,如果一个索引有五个分区,那么该索引数据会存储在五个段中。
1.2.1 用户段创建
默认地,当创建表、索引和分区时,数据库会创建 deferred段(deferred意为“延迟的”),仅更新数据库元数据。当用户向一张表或者一个分区插入第一行数据时,数据库才会为用户对象创建段。创建Deferred段可以避免不必要的资源开支。例如,应用安装时可能会创建成千上万的对象,占用大量的磁盘空间,但是其中许多对象根

本文详细介绍了Oracle数据库中的段(Segment)结构,包括数据段、索引段、回滚段(undo段)和临时段。数据段是与表和簇相关的磁盘空间区域,由一个或多个数据区构成。回滚段存储事务的undo数据,用于回滚和读一致性。临时段在处理查询和创建索引时使用,分配和释放频繁。段的管理涉及高水位线(HWM),在手动和自动管理模式下有所不同。通过DBMS_SPACE_ADMIN包可以管理空对象的段,优化资源使用。
最低0.47元/天 解锁文章
663

被折叠的 条评论
为什么被折叠?



