1、数据块: 数据块是Oracle逻辑存储结构中最小的逻辑单位,也是执行数据库输入输出的最小存储单位。Oracle数据存放在“Oracle数据块”中,而不是“操作系统块”中。通常Oracle数据块操作系统块的整数倍,如果操作系统块的大小为2048B,并且Oracle数据块的大小为8192B,则表示Oracle数据块由4个操作系统块构成。Oracle数据块有一定的标准大小,其大小被写入到初始化参数DB_BLOCK_SIZE中。另外,Oracle支持在同一个数据库中使用多种大小的块,与标准块大小不同的块就是非标准块。 数据块中可以存放表数据、索引数据和簇数据等,无论存放哪种类型的数据,其结构都是相同的。数据块由块头、表目录、行目录、空余数据和行数据这5部分组成。 块头:存放数据块的基本信息,如块的物理地址。块所属的短的类型。 表目录:存放表的相关信息。如果数据块中存储的数据时表数据,则表目录中存储有关这些表的相关信息。 行目录:如果块中有行数据存在,则这些行的信息将被记录在行目录中。这些信息包括行的地址等。 空余空间:空余空间是一个块中未使用的区域,这片区域用于新行的插入和已经存在的行的更新。 行数据:用于存放表数据和索引数据的地方,这部分空间已被数据行所占用(如表中的若干行数据记录)。 通常把块头、表目录、行目录这3部分组合起来称为头部信息区,头部信息区不存放数据,它存放整个块的引导信息,起到引导系统读取数据的作用。所以头部信息若遭到破坏,则Oracle系统将无法读取这部分数据。另外,空余空间和行数据共同构成块的存储区,用于存放真正的数据记录。
2、例:通过v$parameter数据字典来查询Oracle标准数据块的大小,具体代码如下。
3、数据区: 数据区(也可称作数据扩展区)是由一组连续的Oracle数据块所构成的Oracle存储结构,一个或多个数据块组成一个数据区,一个或多个数据区再组成一个段(Segment)。当一个段中的所有空间被使用完后,Oracle系统将自动为该段分配一个新的数据区,这也正符合Extent这个单词所具有的“扩展”的含义,可见数据区是Oracle存储分配的最小单位,Oracle就以数据区为单位进行存储控件的扩展。 使用数据区的目的是用来保存特定数据类型的数据。数据区是表中数据增长的基本单位,在Oracle数据库中,分配存储空间就是以数据区为单位的。一个Oracle对象包含一个数据区。设置一个表或索引的存储参数包含设置它的数据区大小。
4、段: 段是由一个或多个数据区构成的,它不是存储空间的分配单位,而是一个独立的逻辑存储结构,用于存储表、索引或簇等占用空间的数据对象,Oracle也把这种占用空间的数据对象统一称为段。一个段只属于一个特定的数据对象,每当创建一个具有独立段的数据对象时,Oracle将为它创建一个段。 段是为特定的数据对象(如表、索引、回滚等)分配的一系列数据区。段内包含的数据区可以不连续,并且可以跨越多个文件,使用段的目的是用来保存特定的对象。
5、4种类型的段: 1、数据段:数据段中保存的是表中的数据记录。在创建数据表时,Oracle系统将为表创建数据段。当表中的数据量增大时,数据段的大小自然也随着变大,数据段的增大过程是通过向其添加新的数据区来实现的。当创建一个表时,系统自动创建一个以该表的名字命名的数据段。 2、索引段:索引段中包含了用于提高系统性能的索引。一旦建立索引,系统自动创建一个以该索引的名字命名的索引段。 3、回滚段:回滚段(也可称作撤销段)中保存了回滚条目,Oracle将修改前的旧值保存在回滚条目中。利用这些信息,可以撤销未提交的操作,以便为数据库提供读入一致性和回滚未提交的事务,即用来回滚事务的数据空间。当一个事务开始处理时,系统为之分配回滚段,回滚段可以动态创建和撤销。Oracle 11g系统有个默认的回滚段,其管理方式既可以是自动的,也可以是手工的。 4、临时段:当执行创建索引、查询等操作时,Oracle可能会使用一些临时存储空间,用于暂时性地保存解析过的查询语句以及在排序过程中产生的临时数据。Oracle系统将在专门用于存储临时数据的表空间为操作分配临时段。
6、表空间: Oracle使用表空间将相关的逻辑结构(如段、数据区等)组合在一起,表空间是数据库的最大逻辑划分区域,通常用来存放数据表、索引、回滚段等数据对象,任何数据对象在创建时都必须被指定存储在某个表空间中。表空间(属逻辑存储结构)与数据文件(属物理存储结构)相对应,一个表空间由一个或多个数据文件组成,一个数据文件只属于一个表空间;Oracle数据的存储空间在逻辑上表现为表空间,而在物理上表现为数据文件。举个例子来说,表空间相当于操作系统中的文件夹,而数据文件就相当于文件夹中的文件。每个数据库至少有一个表空间(即SYSTEM表空间),表空间的大小等于所有从属于它的数据文件大小的总和。 由于表空间在物理上(即磁盘上)包含操作系统中的一个或多个数据文件,因此在表空间中创建的数据对象就存在以下两种数据情况: 1、若表空间只包含一个数据文件,则该表空间中的所有对象都存储在这个文件中。 2、若表空间包含多个数据文件,则Oracle即可将数据对象都存储在该表空间的任意一个数据文件中,也可以将同一个数据对象中的数据分布在表空间的多个数据文件中。 在创建数据库时,Oracle系统会自动创建多个默认的表空间,这些表空间除了用于管理用户数据的表空间之外,还包括用于管理Oracle系统内部数据(如数据字典)的表空间