Oracle 逻辑存储结构

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle 逻辑存储结构

逻辑存储结构是Oracle 数据库存储结构的核心内容,对Oracle 数据库的所有操作都会涉及到其逻辑存储结构。数据库的逻辑结构是从逻辑的角度分析数据库的构成,即创建数据库后形成的逻辑概念之间的关系。在逻辑上,Oracle 将保存的数据划分为一个个小单元来进行存储和维护,高一级的存储单元由一个或多个低一级的存储单元组成。Oracle 的逻辑存储单元从小到大依次为:数据块(DA TA BLOCKS )、盘区(EXTENT )、段(SEGMENTS )和表空间(TABLE SPACES ),图2-2显示了各逻辑单位之间的关系。 数据库

...表空间

表空间段

段盘区

数据块盘区数据块

段段数据库...表空间表空间段段盘区数据块盘区数据块段

图2-2 数据库的逻辑存储组成

由图2-2可知,Oracle 数据库由多个表空间组成,而表空间又由许多段组成,段由多个盘区组成,盘区又由多个数据块组成。

1 数据块

数据块是Oracle 用来管理存储空间的最小单元,也是执行数据库输入输出操作时的最小单位。相对应地,操作系统执行输入输出操作的最小单位为一个操作系统块的大小。在操作系统中,执行I/O 操作是以操作系统块为单位,而在Oracle 中,执行的I/O 操作以Oracle 数据块为单位。

Oracle 块的大小是操作系统块大小的整数倍。以Windows NT 操作系统为例,NTFS 格式的磁盘分区一般为4KB 大小,因此Oracle 块的大小为8KB 等。数据块的标准大小由初始化参数DB_BLOCK_SIZE 确定,具有标准大小的块被称为标准块。Oracle 支持在同一个数据库中使用多种大小的块,与标准块大小不同的块称为非标准块。

可以通过查询V$PARAMETER 数据字典,可以获得参数DB_BLACK_SIZE 的值,该参数值同时也是数据块的尺寸大小。例如:

SQL> select name,value

2 from v$parameter where name ='db_block_size';

NAME V ALUE

--------------------------- --------------------------

db_block_size 8192

在数据块中可以存储各种类型的数据,如表数据、索引数据、簇数据等。无论数据块中存放何种类型的数据,块都具有相同的结构,图2-3列出一个Oracle 块的基本结构。

块头部

表目录

行目录

空闲空间

行空间

图2-3 数据块的结构

数据块的各组成部分分别介绍如下:

●块头部块头部包含块中一般的属性信息,如块的物理地址、块所属的段的类型(如

数据段、索引段、回退段等)。

●表目录如果块中存储的数据是表数据(表中一行或多行记录),则表目录中存储

关于该表的相关信息。

●行目录如果块中存储的数据为表数据(表中的一行或多记录),则在行目录中保

存这些记录的相关信息。

●空闲空间空闲空间是块中尚未使用的存储空间。当向数据块中添加新数据时,将

减小空闲空间。

●行空间行空间是块中已经使用的存储空间,在行空间中存储了数据库对象的数

据。例如,表中的一行或多行记录。

块头部、表目录和行目录共同组成块的头部信息区。块的头部信息区中并不存放实际的数据库数据,它只起到引导系统读取数据的作用。因此,如果头部信息区被损坏,则整个数据块将失效,数据块中存储的数据将丢失。而空闲空间和行空间则共同构成块的存储区,空闲空间和行空间的总和即是块的总容量。

2 盘区

盘区是由一系列物理上连续存放的数据块所构成的Oracle存储结构,由一个或多个数据块组成一个盘区,而一个或多个盘区组成一个段。当一个段中的所有空间被使用完后,系统将自动为该段分配一个新的盘区。盘区是Oracle存储分配的最小单位。

在Oracle中创建带有实际存储结构的数据库对象时,Oracle将为对象分配相应的盘区,以构成一个段来提供存储空间。当段中已经分配的区写满后,Oracle将为段分配一个新的区,以便容纳更多的数据库。

3 段

段是由一系列区组成的,它也不再是存储空间的分配单位,而是一个独立的逻辑存储结构。对于具有独立存储结构的对象,它的数据全部存储在保存它的段中。一个段只属于一个特定的数据库对象,每当创建一个具有独立段的数据库对象时,Oracle将为它创建一个段。例如,在Oracle中创建表时会为它分配若干个区,以组成表的数据段。

在Oracle中,不同类型的数据库对象拥有不同类型的段。根据段中存放的数据库对象类型,可以将段分为几种类型:数据段、索引段、临时段、回退段和LOB段。

1.数据段

在数据段中保存的是表中的记录。当用户创建表的同时,Oracle系统将为表创建数据段。Oracle中所有未分区的表都使用一个段来保存数据。

当表中的数据增加时,数据段也将变大,数据段的增大过程是通过添加新盘区实现的。在表空间中创建了多少个表,相应地在该表空间就有同量的数据段,并且数据段的名称与它对应的表名相同。

2.索引段

在索引段中保存的是索引中的索引信息。在使用CREATE INDEX语句创建索引,或者在定义约束是自动创建索引的同时,Oracle将为索引创建它的索引段。

3.临时段

当用户执行查询等操作时,Oracle可能会需要使用到一些临时存储空间,用于临时保存解析过的查询语句,以及在排序过程中产生的临时数据。Oracle会自动在专门用于存储临时数据的表空间为操作分配临时段。

在执行如下几种类型的SQL语句时,Oracle都会在临时表空间中为语句操作分配一个临时段:

●CREATE INDEX

●SELECT …ORDER BY

●SELECT DISTINCT

●SELECT ... GROUP BY

●SELECT … UNION

●SELECT … INTERSECT

●SELECT … MINUS

如果经常需要执行上面类型的语句,最好调整SORT_AREA_SIZE初始化参数来增大排序区,使排序操作尽量能够在内存中完成,以获得更好的性能。

当操作执行完毕后,为该操作分配的临时段将被释放。当带有排序的操作十分频繁时,临时段的分配和释放也将十分频繁,因此为了提高性能,Oracle创建了一个独立的临时表空间,并在其中存放临时段,这样可以避免与其他表空间争用存储空间。

4.回退段

回退段用于保存回退条目,Oracle将被用户修改前的值保存在回退条目中。利用这些信息,用户可以撤销未提交的操作,Oracle则可以利用回退段来维护数据库的读写一致性,并能够从实例崩溃中时进行恢复。

在Oracle 11g中,回退也被称为撤销管理,并且不需要为数据库创建多个回退段,也不需要管理回退段,只需要创建一个撤销表空间。对回退段的管理由Oracle自动完成,这就是自动撤销管理。

5.LOB段

如果表中含有如CLOB和BLOB等大对象类型数据时,系统将创建LOB段以存储相应的大型对象数据。LOB段独立于保存表中其他数据的数据段。

4 表空间

表空间是在Oracle中用户可以使用的最大的逻辑存储结构,用户在数据库中建立的所有内容都被存储在表空间中。Oracle使用表空间将相关的逻辑结构组合在一起,表空间在物理上与数据文件相对应,每一个表空间是由一个或多个数据文件组成的,一个数据文件只可以属于一个表空间,这是逻辑与物理的统一。所以存储空间在物理上表现为数据文件,而在逻辑上表现为表空间。数据库管理员可以创建若干个表空间,也可以为表空间增加或删除数

相关文档
最新文档