存储结构概述
Oracle 数据库的存储结构分为物理存储结构
和逻辑存储结构
两种。
- 物理存储结构主要用于描述在 Oracle 数据库外部数据的存储,即在操作系统层面中如何组织和管理数据,与具体的操作系统有关。
- 逻辑存储结构主要描述 Oracle 数据库内部数据的组织和管理方式,即在数据库管理系统的层面中如何组织和管理数据,与操作系统没有关系。
物理存储结构具体表现为一系列的操作系统文件,是可见的;而逻辑存储结构是物理存储结构的抽象体现,是不可见的,可以通过查询数据库数据字典了解逻辑存储结构信息。
Oracle 数据库的物理存储结构与逻辑存储结构既相互独立又相互联系,如图所示。
从图中可以看出数据库物理存储结构与逻辑存储结构的基本关系。
- 一个数据库在物理上包含多个数据文件,在逻辑上包含多个表空间。
- 一个表空间包含一个或多个数据文件,一个数据文件只能从属于某个表空间。
- 数据库的逻辑块由一个或多个操作系统块构成。
- 一个逻辑区只能从属于某一个数据文件,而一个数据文件可包含一个或多个逻辑区。
1. 物理存储结构概述
Oracle 数据库的物理存储结构是由一系列操作系统文件组成的,存放于物理磁盘上,是数据库的实际存储单元。这些文件主要包括数据文件、控制文件、重做日志文件、归档文件、初始化参数文件、跟踪文件、告警文件等。每种文件都存储特定内容的信息,其数量也因文件类型不同而不同。
- 数据文件:是数据库中所有数据的实际存储空间,所有数据文件的大小和构成了数据库的大小。
- 控制文件:记录数据库结构信息的重要的二进制文件,由 Oracle 系统进行读 / 写操作,DBA 不能直接操作控制文件。
- 重做日志文件:是以重做记录的形式记录、保存用户对数据库所进行的变更操作,是数据库中最重要的物理文件。
- 归档日志文件:是历史联机重做日志文件的集合,是联机重做日志文件被覆盖之前备份的副本。
- 初始化参数文件:是数据库启动过程所必需的文件,记录了数据库显式参数的设置。数据库启动的第一步就是根据初始化参数文件中的设置,创建并启动实例,即分配内存空间、启动后台进程。
- 跟踪文件:是数据库中重要的诊断文件,是获取数据库信息的重要工具,对管理数据库的实例起着至关重要的作用。跟踪文件中包含数据库系统运行过程中所发生的重大事件的有关信息,可以为数据库运行故障的解决提供重要信息。
- 告警文件:是数据库中重要的诊断文件,记录数据库在启动、关闭和运行期间后台进程的活动情况。
2. 逻辑存储结构概述
Oracle 数据库的逻辑存储结构是从逻辑的角度来分析数据库的构成的,也就是数据库创建后利用逻辑概念来描述 Oracle 数据库内部数据的组织和管理形式。在操作系统中,没有数据库逻辑存储结构信息,而只有物理存储结构信息。数据库的逻辑存储结构概念存储在数据库的数据字典中,可以通过数据字典查询逻辑存储结构信息。
Oracle 数据库的逻辑存储结构分为 Oracle 数据块(Oracle DATE Block)、区(Extent)、段(Segment)和表空间(Table space)4 种,它们之间的关系如图所示。一个或多个连续的 Oracle 数据块构成区,一个或多个区构成段,一个或多个段构成表空间,所有表空间构成数据库。
-
Oracle 数据块
Oracle 数据块是数据库中最小的逻辑存储单元,是数据库执行输入、输出操作的最小单位,由一个或者多个操作系统块构成。在 Oracle 11g 数据库中,数据块分为标准块和非标准块两种,其中标准块由数据库初始化参数 DB_BLOCK_SIZE 设置,其大小不可更改。Oracle 数据库的默认数据缓冲区就是由标准数据块构成的。
-
区
区是由一系列连续的数据块构成的逻辑存储单元,是存储空间分配的最小单位。当创建一个数据库对象时,Oracle 为对象分配若干个区,以构成一个段来为对象提供初始的存储空间。当段中已分配的区都写满后,Oracle 会为段分配一个新区,以容纳更多的数据。构成一个段的所有区只能在一个文件中。在 Oracle 数据库中,引入区的目的是为了提高系统存储空间分配的效率,以区为单位的存储空间分配大大减少了磁盘分配的次数。
-
段
段是由一个或多个连续或不连续的区组成的逻辑存储单元,用于存储特定的、具有独立存储结构的数据库对象。根据存储对象类型不同,分为表段、索引段、临时段和回退段 4 类。
- 表段,又称数据段,用来存储表或簇的数据,可以细分为普通表段(TABLE)、分区表段(TABLE Partition)、簇段(Cluster)、索引化表段(INDEX-organized TABLE)。
- 索引段用来存放索引数据,包括 ROWID 和索引键值。
- 临时段是进行查询、排序等操作时,如果内存空间不足,用于保存 SQL 语句在解释和执行过程中产生的临时数据。会话结束时,为该操作分配的临时段将被释放。
- 回退段用于保存数据库的回退信息,包含当前未提交事务所修改的数据的原始版本。利用回退段中保存的回退信息,可以实现事务回滚、数据库恢复、数据的读一致性和闪回查询。
-
表空间
表空间是 Oracle 数据库最大的逻辑存储单元,数据库的大小从逻辑上看就是由表空间决定的,所有表空间大小的和就是数据库的大小。在 Oracle 数据库中,存储结构管理主要就是通过对表空间的管理来实现的。
表空间与数据库文件直接关联,一个表空间包含一个或多个数据文件,一个数据文件只能从属于某一个表空间,数据库对象就是存储在表空间对应的一个或多个数据文件中。
表空间根据存储数据的类型不同,分为系统表空间和非系统表空间两类。系统表空间主要存放数据库的系统信息,如数据字典信息、数据库对象定义信息、数据库组件信息等。非系统表空间又分为撤销表空间、临时表空间和用户表空间等。其中,撤销表空间用于自动管理数据库的回退信息,临时表空间用于管理数据库的临时信息,用户表空间用于存储用户的业务数据。Oracle 11g 数据库在创建时会自动创建 6 个表空间,见表 3-1。
Oracle 11g 数据库自动创建的表空间
名称 | 类型 | 描述 |
---|---|---|
SYSTEM | 系统表空间 | 存放数据字典、数据库对象定义、PL/SQL 程序源代码等系统信息 |
SYSAUX | 系统表空间 | 辅助系统表空间,存储数据库组件等信息 |
TEMP | 临时表空间 | 存放临时数据,用于排序等操作 |
UNDOTBS1 | 撤销表空间 | 存储、管理回退信息 |
USERS | 用户表空间 | 存放用户业务数据信息 |
EXAMPLE | 示例表空间 | 示例表空间,存放示例的数据库方案对象信息 |