前言
在刚学习Oracle的时候,会接触的一个叫“表空间”的词,很容易被误认为“表”。实际上这是两个完全不同的概念,表空间是Oracle里逻辑存储上最大的单位,”表“是关系型数据库存储和管理数据的一种结构,由行和列组成,每行代表一条记录,每列代表记录中的一个字段。“表”对应Oracle逻辑存储的段,而且只是众多段的一种。
现在我们看一下,该如何去理解这些概念:实例(Instance)、表空间(Table space)、模式(Schema)、数据库对象、用户(Users)、段(segment)、区(extend)、块(block)、表(table)、列(column)、行(row)
行、列、表
在关系数据库中,表(Table)是数据的主要组织单元。它是由一组命名的列和行组成,用于存储和组织数据。
列(Column)是表中的一个字段,用于存储特定类型的数据。每个列都有一个名称和相应的数据类型。例如,一个包含学生信息的表可以有列如"学生编号"、“姓名"和"年龄"等,其中每个列分别存储学生的唯一编号、姓名和年龄数据。
行(Row),也称为记录(Record),是表中的一个实例或一个数据行。每行由一组与该表的列相对应的值组成。例如,在上述的学生信息表中,每一行可以表示一个学生的具体信息,包括学生编号、姓名和年龄。
简单来说:
表是一个二维的数据结构,由行和列组成。 列是表中的一个字段,用于定义数据的类型和存储特定数据。 行是表中的一个记录或实例,包含一组值,每个值与相应列对应。
就像这样:
EmpId | Lastname | Firstname | Salary |
---|---|---|---|
1 | Smith | Joe | 40000 |
2 | Jones | Mary | 50000 |
3 | Johnson | Cathy | 44000 |
块、区、段、表空间
接下来是Oralce逻辑存储上的划分:
首先我们清空大脑,想象数据库宏观上都要存储哪些东西。
主要是数据文件和日志文件,是吧。
接着想象,它们存储在磁盘上,是直接在磁盘上吗?不,数据库要做到管理数据,就必须要划分出一个最小的单元,这个单元就叫做块。块是Oracle数据库中最小的逻辑单元,也是最小的I/O单元。
块的大小可以是2KB、4KB、8KB(默认)、16KB、32KB等,这些大小必须是倍数增加。
一个块的结构包括以下几个部分:
- 块头(Block Header):存放块的基本信息,如块的物理地址、块所属的类型(数据段、索引段等)、事务槽(用于记录对块进行事务处理的信息)等。块头的大小不是固定的,但通常占用一定的空间。
- 表目录(Table Directory):如果块中存储的数据为表数据,则表目录中保存这个表的相关信息。
- 行目录(Row Directory):如果块中存储的数据为表数据,则行目录中保存数据行的相关信息,它是一个指针数组,指示了每一行在数据块中的物理位置。
- 行数据(Row Data):真正存放数据的区域,这部分空间已被使用。
- 空闲空间(Free Space):未使用的区域,用于新行的插入或者已经存在行的更新。
现在,一些块在物理上连续地在一起,就组成了一个区,区的大小从一个块到2GB不等。
区的概念很容易理解,当很多相连或者不相连的区组合在一起,就变成了一个段。
段是Oracle数据库中的分配单位,对象如表、索引等都是以段为单位进行分配。当创建一个表时将创建一个表段,创建一个索引时就创建一个索引段。每一个消耗存储空间的对象最终被存储到一个段中。有回滚段、临时段、聚簇段、索引段等。
我们上边所说的表,其实就是一个表段,也可以说数据段。毫无疑问,表段是最主要的段,但其他段的作用也不可忽视。
继续向上延伸,引出表空间的概念:表空间是数据库中存储数据的逻辑容器,可以包含一个或多个数据文件(*.DBF),DBF文件就可以肉眼(ls命令)看到啦!
一个段只能属于一个表空间,并且只能存储在该表空间的数据文件中。虽然段属于一个表空间,但它可以跨越该表空间内的多个数据文件(*.DBF)。Oracle数据库会自动管理数据块和区的分配,以便将段分布在多个数据文件中,以提高性能和空间利用率。而一个区只能属于一个数据文件。
模式、用户
模式是数据库对象的逻辑集合。数据库对象包括表,视图,同义词,约束、索引,序列,游标,触发器,函数,变量,(控制块,异常),存储过程,包。模式中的对象存储在表空间中,一个表空间可以包含多个模式中的对象,而一个模式中的对象也可以分布在多个表空间中。 用户是指拥有数据库访问权限的实体,每个用户都对应一个模式(Schema)。当用户在Oracle数据库中创建时,通常会为其指定一个默认表空间。该表空间将作为用户创建新对象(如表、索引等)时的默认存储位置。 要注意,schema是逻辑对象的集合组织,是一个组织概念,和表空间等逻辑概念不属于一个层面。在oracle中,一个user对应的就是一个schema,二者是强相关的。
总结
oracle数据库存储的逻辑和物理结构