物理存储结构

可在操作系统级别查看 Oracle 数据库的物理数据库结构。

物理存储结构简介

RDBMS 的一个特性是逻辑数据结构(如表、视图和索引)与物理存储结构(如文件)的独立性。

由于物理结构和逻辑结构是分开的,因此可以管理数据的物理存储,而不会影响对逻辑结构的访问。例如,重命名数据库文件不会重命名其中存储的表。

Oracle 数据库是一组将 Oracle 数据存储在持久性存储中的文件。从 Oracle Database 21c 开始,仅支持多租户容器数据库 (container database,CDB) 体系结构。CDB 包含一个或多个 PDB。

本节讨论在发出 CREATE DATABASE 语句以创建 CDB 时生成的数据库文件:

数据库实例是一组管理 CDB 中数据库文件的内存结构。下图显示了实例与其管理的文件之间的关系。

图 1:数据库实例和数据库文件

插图 cncpt223.gif 的说明

另请参见:

用于存储数据库文件的机制

可使用多种机制来分配和管理这些文件的存储。

机制包括:

数据库可以使用上述存储机制的组合。例如,数据库可以将服务器参数文件存储在传统的文件系统中,将数据库文件存储在 PMEM Filestore 中,然后将重做日志文件归档到群集文件系统。

另请参见:

Oracle Managed Files 和用户管理的文件

Oracle Managed Files 是一种文件命名策略,可用于根据数据库对象而不是文件名指定操作。例如,可以在不指定表空间数据文件名称的情况下创建表空间。

通过 Oracle Managed Files,管理员无需直接管理数据库中的操作系统文件。Oracle ASM 需要 Oracle Managed Files。

注:此功能不影响管理文件的创建或命名,例如跟踪文件、审计文件和预警日志。

使用用户管理的文件,可以直接管理数据库中的操作系统文件。您可以决定有关文件结构和命名。例如,创建表空间时,需要设置表空间数据文件的名称和路径。

通过初始化参数,可以为特定类型的文件指定文件系统目录。Oracle Managed Files 功能可确保数据库创建唯一文件并在不再需要时将其删除。数据库内部使用标准文件系统接口为存储在快速恢复区中的数据文件和临时文件、控制文件以及与恢复相关的文件创建和删除文件。

Oracle Managed Files 不会消除现有功能。您可以在手动管理旧文件时创建新文件。因此,数据库可以混合使用 Oracle Managed Files 和用户管理的文件。

另请参见:

Oracle Automatic Storage Management (Oracle ASM)

Oracle ASM 是一款适用于 Oracle AI Database 文件的高性能、易于管理的存储解决方案。Oracle ASM 是一个卷管理器,它提供了一个专供数据库使用的文件系统。

与传统文件系统和存储管理器相比,Oracle ASM 具有以下优势:

要使用 Oracle ASM,可以为 Oracle AI Database 分配分区磁盘,并具有条带化和镜像首选项。Oracle ASM 管理磁盘空间,将 I/O 负载分布在所有可用资源中,以优化性能,同时无需手动进行 I/O 优化。例如,您可以增加数据库磁盘的大小,或者将数据库的一部分移动到新设备,而无需关闭数据库。

Oracle ASM 存储组件

Oracle AI Database 可以将数据文件存储为 Oracle ASM 磁盘组中的 Oracle ASM 文件。在磁盘组中,Oracle ASM 会为数据库文件公开文件系统接口。

下图显示了使用 Oracle ASM 的数据库中的存储组件之间的关系。该图描述了 Oracle ASM 文件与数据文件之间的关系,尽管 Oracle ASM 可以存储其他类型的文件。鸦脚的表示法表示一对多关系。

图 2:Oracle ASM 组件

插图 cncpt267.gif 的说明

图 14-2 说明了以下 Oracle ASM 概念:

另请参阅:Oracle Automatic Storage Management Administrator’s Guide 以了解有关 Oracle ASM 的更多信息

Oracle ASM 实例

Oracle ASM 实例是管理 Oracle ASM 磁盘的特殊 Oracle 实例。

Oracle ASM 和数据库实例都需要对 Oracle ASM 磁盘组中的磁盘进行共享访问。Oracle ASM 实例管理磁盘组的元数据并向数据库实例提供文件布局信息。数据库实例无需通过 Oracle ASM 实例即可将 I/O 定向到 Oracle ASM 磁盘。

Oracle ASM 实例采用与数据库实例相同的技术构建。例如,Oracle ASM 实例具有系统全局区 (system global area,SGA) 和后台进程,这些进程与数据库实例的进程类似。但是,Oracle ASM 实例无法装载数据库,并且执行的任务比数据库实例少。图 14-3 显示了具有一个 Oracle ASM 实例和两个数据库实例的单节点配置,每个实例都与不同的单实例数据库关联。Oracle ASM 实例管理元数据并为存储两个数据库数据的 Oracle ASM 文件提供空间分配。一个 Oracle ASM 磁盘组具有四个 Oracle ASM 磁盘,另一个具有两个磁盘。两个数据库实例都可以访问磁盘组。

图 3:Oracle ASM 实例和数据库实例

插图 cncpt266.gif 的说明

另请参阅:Oracle Automatic Storage Management Administrator’s Guide 以了解有关 Oracle ASM 的更多信息

Oracle Persistent Memory Filestore(PMEM 归档存储)

PMEM 是可字节地址的持久性内存。Oracle Persistent Memory Filestore (PMEM Filestore) 可以存储数据文件、联机重做日志文件和控制文件。

查询可以直接从 PMEM 读取字节,而无需先将块迁移到数据库缓冲区高速缓存。这种高性能机制可避免数据冗余和不必要的 I/O。注: PMEM 文件存储无法存储跟踪文件、审计文件或服务器参数文件。PMEM 支持的文件类型与 Oracle ASM 的类型类似。

直接映射的缓冲区高速缓存

在传统的存储金字塔中,PMEM 位于 DRAM(非持久性)和 Flash(持久性(非易失性)之间。

图 4:存储金字塔

插图 pmem.png 的说明

数据库缓冲区高速缓存位于 DRAM 中。Oracle 进程对 PMEM 归档存储中的块具有可直接字节地址的访问权限,这些块映射到数据库缓冲区高速缓存。将数据文件放在 PMEM 文件存储中时,将自动调用映射机制。

Oracle AI Database 使用内部算法来决定是否将数据块从 PMEM 文件存储迁移到 DRAM。迁移的典型原因包括 DML 修改、读取一致性和对热数据块的更快访问。

另请参见:“ DRAM 和 PMEM 缓冲区”

PMEM Filestore 的文件系统接口

PMEM Filestore 在用户空间 (Userspace,FUSE) 中实施名为 Filesystem 的协议。

FUSE 支持非特权操作系统用户(例如 Oracle AI Database 软件所有者)创建和管理文件系统及其中的目录和文件。例如,可以使用命令 cp、rm 和 ls。

典型的文件系统使用原始存储作为其后备存储,而 PMEM Filestore 则从 PMEM DAX 文件系统中的本机操作系统文件获取存储。此文件称为备份文件,在操作系统中作为文件可见。PMEM Filestore 将备份文件中的存储细分,并将其显示为本地文件系统。

另请参见:

PMEM Filestore 的用户界面

要创建 PMEM 文件存储,请使用 CREATE PMEM FILESTORE 命令。

PMEM 文件存储将在创建后自动挂载。PMEM 文件存储显示在指定的挂载点下,就好像它是本机文件系统一样。

PMEM_FILESTORE 初始化参数指定数据库实例在启动时自动挂载的 PMEM 文件存储。该参数设置为有序的字符串对。参数值列表中的第一个字符串是挂载 PMEM Filestore 的目录。第二个字符串是备份文件。

V$PMEM_FILESTORE 显示有关 PMEM 文件存储的元数据。例如,您可以查看挂载点的目录路径、备份文件的文件路径以及文件存储大小。

另请参阅:Oracle AI Database Administrator’s Guide,了解如何创建和管理 PMEM 文件存储

数据文件概览

在操作系统级别,Oracle AI Database 将数据存储在称为数据文件的结构中。每个 Oracle 数据库(无论是 CDB 还是 PDB)必须至少有一个数据文件。

使用数据文件

Oracle AI Database 以物理方式将数据表空间数据存储在数据文件中。

每个未分区的方案对象和对象的每个分区都存储在各自的段中,该段仅属于一个表空间。例如,未分区表的数据存储在一个段中,而该段又存储在一个表空间中。表空间与数据文件密切相关,但二者明显不同:

下图显示了表空间、数据文件和段之间的关系。

图 5:数据文件和表空间

插图 cncpt037.gif 的说明

另请参见:

永久和临时数据文件

永久表空间包含持久性方案对象。永久表空间中的对象存储在数据文件中。

临时表空间仅在会话持续期间适用方案对象。本地管理的临时表空间具有临时文件(临时文件),临时文件是用于以散列、排序和其他操作存储数据的特殊文件。内存中空间不足时,临时文件还会存储结果集数据。

临时文件与永久数据文件类似,但以下情况除外:

另请参见:

联机和脱机数据文件

每个数据文件要么是联机(可用)要么是脱机(不可用)。

您可以通过将单个数据文件或临时文件脱机或联机来更改这些文件的可用性。数据库在联机之前无法访问脱机数据文件。

您可以出于多种原因使数据文件脱机,包括执行脱机备份或块损坏。如果数据库无法写入数据文件,则数据库会自动使数据文件脱机。

与数据文件一样,表空间本身处于脱机或联机状态。在联机表空间中使数据文件脱机时,表空间本身将保持联机状态。通过使表空间本身脱机,可以使表空间的所有数据文件暂时不可用。

从 Oracle Database 12c 开始,当数据库打开并访问该文件时,可以使用 ALTER DATABASE MOVE DATAFILE 语句将联机数据文件从一个物理文件移动到另一个物理文件。您可以使用此技术实现以下目标:

另请参见:

数据文件结构

Oracle AI Database 通过分配指定的磁盘空间量加上数据文件标头的开销,为表空间创建数据文件。运行 Oracle AI Database 的操作系统负责清除文件中的旧信息和授权,然后再将其分配给数据库。

数据文件头包含有关数据文件的元数据,例如其大小和 checkpoint SCN 。每个头包含一个绝对文件编号(用于唯一标识数据库中的数据文件)和一个相对文件编号(用于唯一标识表空间中的数据文件)。

Oracle AI Database 首次创建数据文件时,分配的磁盘空间将进行格式化,但不包含任何用户数据。但是,数据库会保留空间以保存关联表空间将来段的数据。随着数据在表空间中的增长,Oracle AI Database 将使用数据文件中的空闲空间为段分配区。

下图说明了数据文件中不同类型的空间。使用区,这意味着它们包含段数据,或者是空闲区,这意味着它们可供重用。随着时间的推移,更新和删除表空间中的对象会创建一段空白空间,而每一部分都不足以供新数据重用。这种类型的空闲空间称为碎片化空闲空间。

图 6:数据文件中的空间

插图 cncpt273.gif 的说明

另请参阅:Oracle AI Database Administrator’s Guide 以了解如何查看数据文件信息

概述控制文件

数据库控制文件是仅与一个 CDB 关联的小型二进制文件。

每个 CDB 都有一个唯一的控制文件,但允许多个相同的副本。PDB 没有单独的控制文件。

控制文件的使用

Oracle AI Database 使用控制文件查找数据库文件并通常管理数据库的状态。

控制文件包含如下信息:

控制文件用于以下目的:

Oracle AI Database 在数据库使用期间持续读取和写入控制文件,并且每次打开数据库时都必须可供写入。例如,恢复数据库涉及从控制文件读取数据库中包含的所有数据文件的名称。其他操作(如添加数据文件)更新存储在控制文件中的信息。

另请参见:

多个控制文件

Oracle AI Database 支持并发打开多个相同的控制文件并将其写入同一数据库。通过在不同的磁盘上复用控制文件,数据库可以实现冗余,从而避免单点故障。注:Oracle 建议您维护多个控制文件副本,每个副本位于不同的磁盘上。

如果控制文件变得不可用,则数据库实例在尝试访问损坏的控制文件时会失败。如果存在其他当前控制文件副本,则可以重新挂载数据库并在不使用介质恢复的情况下将其打开。但是,如果数据库的 all 控制文件丢失,则数据库实例将失败,需要介质恢复。如果必须使用控制文件的较早备份,因为当前副本不可用,则介质恢复并不简单。

另请参见:

控制文件结构

有关数据库的信息存储在控制文件的不同部分中。每个部分都是一组有关数据库某方面的记录。

例如,控制文件中的一个部分跟踪数据文件并包含一组记录,每个数据文件一个。每个节都存储在多个逻辑控制文件块中。记录可以跨区段中的块。

控制文件包含以下类型的记录:

可以查询动态性能视图(也称为 V$ 视图)以查看存储在控制文件中的信息。例如,可以查询 V$DATABASE 来获取数据库名称和 DBID。但是,只有数据库可以修改控制文件中的信息。

读取和写入控制文件块与读取和写入数据块不同。对于控制文件,Oracle AI Database 会直接从磁盘读取和写入程序全局区 (program global area,PGA)。每个进程为其控制文件块分配一定量的 PGA 内存。

另请参见:

联机重做日志概述

恢复最关键的结构是联机重做日志,该日志由两个或多个预分配文件组成,这些文件在发生更改时存储对数据库的更改。联机重做日志记录对数据文件的更改。

联机重做日志的使用

数据库维护联机重做日志文件以防止数据丢失。具体而言,在实例发生故障后,联机重做日志文件使 Oracle AI Database 能够恢复尚未写入数据文件的已提交数据。

服务器进程将每个事务同步写入重做日志缓冲区,然后 LGWR 进程将它写入联机重做日志。联机重做日志的内容包括未提交的事务处理以及方案和对象管理语句。

当数据库对还原段进行更改时,数据库还会将这些更改写入联机重做日志。因此,联机重做日志始终包含永久对象的还原数据。可以将数据库配置为将临时对象的所有还原数据存储在临时还原段中,这样可以节省空间并提高性能,或者允许数据库将永久和临时还原数据存储在联机重做日志中。

Oracle AI Database 仅使用联机重做日志进行恢复。但是,管理员可以通过 Oracle LogMiner 实用程序中的 SQL 界面查询联机重做日志文件。重做日志文件是有关数据库活动的历史信息的有用来源。

另请参见:

Oracle AI Database 如何写入联机重做日志

数据库实例的联机重做日志称为重做线程。

在单实例配置中,只有一个实例访问数据库,因此仅存在一个重做线程。但是,在 Oracle Real Application Clusters (Oracle RAC) 配置中,多个实例同时访问一个数据库,每个实例都有自己的重做线程。每个实例的单独重做线程可避免对一组联机重做日志文件进行争用。

联机重做日志由两个或多个联机重做日志文件组成。Oracle AI Database 至少需要两个文件,以保证在清除或归档另一个文件时,一个文件始终可供写入。

另请参阅:Oracle Real Application Clusters Administration and Deployment Guide 以了解 Oracle RAC 中的联机重做日志组

联机重做日志切换

Oracle AI Database 一次仅使用一个联机重做日志文件来存储从重做日志缓冲区写入的记录。

日志写进程 (log writer process,LGWR) 进程正在写入的联机重做日志文件称为当前联机重做日志文件。

当数据库停止向一个联机重做日志文件写入并开始向另一个联机重做日志文件写入时,会发生 log switch 。通常,当当前联机重做日志文件已满并且必须继续写入时会发生切换。但是,您可以将日志切换配置为定期执行,而不管当前联机重做日志文件是否已填充,并手动强制执行日志切换。

日志写进程循环写入到联机重做日志文件。日志写进程填充最后一个可用的联机重做日志文件时,该进程将写入第一个日志文件,然后重新启动循环。图 14-7 说明了重做日志的循环写入。

图 7:联机重做日志文件的重用

插图 admin054.gif 的说明

Figure 14-7 中的数字显示了 LGWR 写入每个联机重做日志文件的顺序。当日志切换和日志写进程开始向每个文件写入时,数据库会为每个文件分配一个新的日志序列号。数据库重用联机重做日志文件时,此文件会收到下一个可用的日志序列号。

根据归档模式,填充的联机重做日志文件可供重用:

在某些情况下,日志写进程可能会被阻止重用现有的联机重做日志文件。实例恢复需要活动联机重做日志文件,其中,实例恢复不需要非活动联机重做日志文件。此外,联机重做日志文件可能正在清除。

另请参见:

联机重做日志文件的多个副本

Oracle AI Database 可以在不同位置自动维护联机重做日志的两个或多个相同副本。

联机重做日志组由联机重做日志文件及其冗余副本组成。每个相同的副本都是联机重做日志组的成员。每个组都由一个数字进行定义,如组 1、组 2 等。

维护联机重做日志组的多个成员可以防止重做日志丢失。理想情况下,成员的位置应位于单独的磁盘上,以便一个磁盘的故障不会导致整个联机重做日志丢失。

在图 14-8 中,A_LOG1 和 B_LOG1 是组 1 的相同成员,而 A_LOG2 和 B_LOG2 是组 2 的相同成员。组中的每个成员必须具有相同的大小。LGWR 并发写入组 1(成员 A_LOG1 和 B_LOG1),然后并发写入组 2(成员 A_LOG2 和 B_LOG2),然后写入组 1,依此类推。LGWR 永远不会同时写入到不同组的成员。

图 8:联机重做日志文件的多个副本

插图 cncpt270.gif 的说明

注:Oracle 建议对联机重做日志进行多图复用的操作。如果需要恢复,则丢失日志文件可能是灾难性的。对联机重做日志进行多图复用时,数据库必须增加其所执行的 I/O 量。根据您的系统,此附加 I/O 可能会影响整体数据库性能。

另请参见:

归档重做日志文件

归档重做日志文件是联机重做日志组的填充成员的副本。

归档重做日志文件不被视为数据库的一部分。相反,它是数据库创建并写入到用户指定位置的联机重做日志文件的脱机副本。

归档重做日志文件是备份和恢复策略的关键部分。可以使用归档重做日志文件执行以下操作:

生成归档重做日志文件的操作称为归档。此操作为自动或手动操作。仅当数据库处于 ARCHIVELOG 模式时才可以。

归档重做日志文件包括联机重做日志组的相同成员的重做条目和日志序列号。在 " Multiple Copies of Online Redo Log Files " 中,文件 A_LOG1 和 B_LOG1 是组 1 的相同成员。如果数据库处于 ARCHIVELOG 模式,并且启用了自动归档,则 archiver process (ARCn) 将归档这些文件之一。如果 A_LOG1 已损坏,则进程可以归档 B_LOG1。归档重做日志包含从启用归档开始存在的每个重做日志组的副本。

另请参见:

联机重做日志的结构

联机重做日志文件包含重做记录。

重做记录由一组更改向量组成,其中每个向量都描述对数据块的更改。例如,更新 employees 表中的薪金会生成重做记录,该记录描述对表的数据段块、还原段数据块和还原段的事务处理表所做的更改。

重做记录具有更改的所有相关元数据,包括以下内容:

另请参阅:“数据块概述”