Oracle官方文档翻译《Database Concepts 26ai》第14章-物理存储结构

Oracle官方文档翻译《Database Concepts 26ai》第14章-物理存储结构 14 Physical Storage Structures14 物理存储结构Oracle 数据库的物理数据库结构在操作系统级别是可见的。Introduction to Physical Storage Structures物理存储结构简介关系型数据库管理系统RDBMS的一个特点是逻辑数据结构如表、视图和索引独立于物理存储结构如文件。Overview of Data Files数据文件概述在操作系统级别Oracle AI 数据库将数据存储在称为数据文件的结构中。每个 Oracle 数据库无论是 CDB 还是 PDB都必须至少有一个数据文件。Overview of Control Files控制文件概述数据库控制文件是一个仅与一个 CDB 关联的小型二进制文件。Overview of the Online Redo Log在线重做日志概述用于恢复的最关键结构是在线重做日志它由两个或多个预分配的文件组成用于在数据库发生更改时存储这些更改。在线重做日志记录对数据文件的更改。Introduction to Physical Storage Structures物理存储结构简介关系型数据库管理系统RDBMS的一个特点是逻辑数据结构如表、视图和索引独立于物理存储结构如文件。由于物理和逻辑结构是分开的因此可以管理数据的物理存储而不会影响对逻辑结构的访问。例如重命名数据库文件并不会重命名存储在其中的表。一个 Oracle 数据库是一组将 Oracle 数据存储在持久存储中的文件。从 Oracle Database 21c 开始多租户容器数据库CDB是唯一受支持的架构。CDB 包含一个或多个 PDB。本节讨论在发出CREATE DATABASE语句创建 CDB 时生成的数据库文件数据文件和临时文件数据文件是持久存储中的物理文件由 Oracle AI 数据库创建包含诸如表和索引等数据结构。临时文件是属于临时表空间的数据文件。数据库以 Oracle 专有格式将数据写入这些文件其他程序无法读取。当在 PDB 中创建 PDB 时该 PDB 在构成 CDB 的整体数据文件集内拥有自己的一组数据文件。例如可以创建一个名为mycdb的 CDB然后在其中创建两个 PDBhrpdb和salespdb。在这种情况下mycdb将拥有自己的一组数据文件和临时文件hrpdb和salespdb也是如此。控制文件控制文件是一个根文件用于跟踪 CDB 的物理组件。PDB 没有自己独立的控制文件。在线重做日志文件在线重做日志是一组包含对 CDB 内数据所做更改记录的文件。PDB 没有自己独立的在线重做日志文件。数据库实例是一组管理 CDB 中数据库文件的内存结构。下图显示了实例与其管理的文件之间的关系。Figure 14-1 Database Instance and Database Files图14-1 数据库实例和数据库文件Mechanisms for Storing Database Files存储数据库文件的机制有几种机制可用于分配和管理这些文件的存储。Oracle Managed Files and User-Managed FilesOracle 托管文件和用户管理文件Oracle 托管文件是一种文件命名策略使您能够根据数据库对象而不是文件名来指定操作。例如可以创建表空间而无需指定其数据文件的名称。Oracle Automatic Storage Management (Oracle ASM)Oracle 自动存储管理Oracle ASMOracle ASM 是一种适用于 Oracle AI 数据库文件的高性能、易于管理的存储解决方案。Oracle ASM 是一个卷管理器并提供专为数据库使用而设计的文件系统。Oracle Persistent Memory Filestore (PMEM Filestore)Oracle 持久内存文件存储PMEM 文件存储PMEM 是可字节寻址的持久内存。Oracle 持久内存文件存储PMEM 文件存储可以存储数据文件、在线重做日志文件和控制文件。另请参见《Oracle AI 数据库管理员指南》了解如何创建数据库《Oracle AI 数据库 SQL 语言参考》了解CREATE DATABASE语句的语义和语法Mechanisms for Storing Database Files存储数据库文件的机制有几种机制可用于分配和管理这些文件的存储。这些机制包括操作系统文件系统大多数 Oracle 数据库将文件存储在文件系统中文件系统是用于存储和检索数据的结构。文件系统能够以标准和一致的方式将存储空间用于应用程序数据。每个文件都有一个名称并且对于诸如 Oracle AI 数据库之类的应用程序来说显示为一个连续的地址空间。数据库可以创建、读取、写入、调整大小和删除文件。一个文件系统通常构建在逻辑卷之上逻辑卷由一个称为逻辑卷管理器LVM的软件包构建。LVM 能够将多个物理磁盘的片段组合成看起来像是一个单一的连续地址空间。集群文件系统集群文件系统是一种分布式文件系统它是一个服务器集群这些服务器协作以向其客户端提供一致性和高性能。在 Oracle RAC 环境中集群文件系统使共享存储显示为一个由集群环境中许多计算机共享的文件系统。使用集群文件系统集群中一台计算机的故障不会导致文件系统不可用。然而在操作系统文件系统中如果通过 NFS 或其他方式共享文件的计算机发生故障那么文件系统将不可用。Oracle Persistent Memory Filestore (PMEM Filestore)Oracle 持久内存文件存储PMEM 文件存储PMEM 文件存储设计用于将数据库文件存储在持久内存PMEM中PMEM 是可字节寻址的持久内存。使用CREATE PMEM FILESTORE命令创建一个文件存储。在 Linux 操作系统级别该文件存储将数据存储在一个以fsdax模式挂载的大型 ext4 文件系统中。PMEM 文件存储对 Oracle AI 数据库来说在 Linux 上显示为本地文件系统。注意与符合 POSIX 标准的文件系统不同PMEM 文件存储不能被多个 Oracle 数据库共享。Oracle Automatic Storage Management (Oracle ASM)Oracle 自动存储管理Oracle ASMOracle ASM 包含一个专为 Oracle AI 数据库使用而设计的文件系统。一个数据库可以使用上述存储机制的组合。例如一个数据库可以将服务器参数文件存储在传统文件系统中将数据库文件存储在 PMEM 文件存储中然后将重做日志文件归档到集群文件系统。另请参见“Oracle Automatic Storage Management (Oracle ASM)Oracle 自动存储管理Oracle ASM”《Oracle AI 数据库管理员指南》了解如何通过查询数据库视图来查看数据库存储结构Oracle Managed Files and User-Managed FilesOracle 托管文件和用户管理文件Oracle 托管文件是一种文件命名策略使您能够根据数据库对象而不是文件名来指定操作。例如可以创建表空间而无需指定其数据文件的名称。Oracle 托管文件消除了管理员直接管理数据库中的操作系统文件的需要。Oracle ASM 要求使用 Oracle 托管文件。注意此功能不影响管理文件如跟踪文件、审计文件和警报日志的创建或命名。使用用户管理文件您直接管理数据库中的操作系统文件。您需要就文件结构和命名做出决策。例如在创建表空间时您设置表空间数据文件的名称和路径。通过初始化参数您可以为特定类型的文件指定文件系统目录。Oracle 托管文件功能确保数据库创建一个唯一的文件并在不再需要时将其删除。数据库在内部使用标准文件系统接口来创建和删除用于数据文件和临时文件、控制文件以及存储在快速恢复区中的与恢复相关的文件。Oracle 托管文件不会消除现有功能。您可以在手动管理旧文件的同时创建新文件。因此一个数据库可以混合使用 Oracle 托管文件和用户管理文件。另请参见“Overview of Diagnostic Files诊断文件概述”《Oracle AI 数据库管理员指南》了解如何使用 Oracle 托管文件Oracle Automatic Storage Management (Oracle ASM)Oracle 自动存储管理Oracle ASMOracle ASM 是一种适用于 Oracle AI 数据库文件的高性能、易于管理的存储解决方案。Oracle ASM 是一个卷管理器并提供专为数据库使用而设计的文件系统。与传统的文件系统和存储管理器相比Oracle ASM 提供了几个优势包括简化与存储相关的任务如创建和布局数据库以及管理磁盘空间在物理磁盘之间分布数据以消除热点并在磁盘之间提供统一的性能在存储配置更改后自动重新平衡数据要使用 Oracle ASM您需要为 Oracle AI 数据库分配分区磁盘并设置条带化和镜像的首选项。Oracle ASM 管理磁盘空间在所有可用资源之间分配 I/O 负载以优化性能同时消除手动 I/O 调优的需要。例如可以增加数据库磁盘的大小或者将数据库的部分内容移动到新设备而无需关闭数据库。Oracle ASM Storage ComponentsOracle ASM 存储组件Oracle AI 数据库可以将数据文件作为 Oracle ASM 文件存储在 Oracle ASM 磁盘组中。在磁盘组内Oracle ASM 为数据库文件提供了一个文件系统接口。Oracle ASM InstancesOracle ASM 实例Oracle ASM 实例是管理 Oracle ASM 磁盘的特殊 Oracle 实例。Oracle ASM Storage ComponentsOracle ASM 存储组件Oracle AI 数据库可以将数据文件作为 Oracle ASM 文件存储在 Oracle ASM 磁盘组中。在磁盘组内Oracle ASM 为数据库文件提供了一个文件系统接口。下图显示了使用 Oracle ASM 的数据库中存储组件之间的关系。该图描绘了 Oracle ASM 文件与数据文件之间的关系尽管 Oracle ASM 可以存储其他类型的文件。鱼尾纹表示法表示一对多的关系。Figure 14-2 Oracle ASM Components图14-2 Oracle ASM 组件图 14-2 说明了以下 Oracle ASM 概念Oracle ASM 磁盘Oracle ASM 磁盘是已调配到 Oracle ASM 磁盘组的存储设备。Oracle ASM 磁盘可以是物理磁盘或分区、来自存储阵列的逻辑单元号LUN、逻辑卷或网络附加文件。可以在数据库运行时向磁盘组添加或删除 Oracle ASM 磁盘。当向磁盘组添加磁盘时可以为其分配一个磁盘名称或者该磁盘会被自动赋予一个 Oracle ASM 磁盘名称。Oracle ASM 磁盘组Oracle ASM 磁盘组是作为一个逻辑单元管理的 Oracle ASM 磁盘的集合。磁盘组中的数据结构是自包含的并消耗磁盘组中的一些磁盘空间。在磁盘组内Oracle ASM 为 Oracle 数据库文件提供了一个文件系统接口。存储在磁盘组中的文件的内容会被均匀分布或条带化以消除热点并在磁盘之间提供统一的性能。Oracle ASM 文件Oracle ASM 文件是存储在 Oracle ASM 磁盘组中的文件。Oracle AI 数据库根据文件与 Oracle ASM 进行通信。数据库可以将数据文件、控制文件、在线重做日志文件和其他类型的文件存储为 Oracle ASM 文件。当数据库请求时Oracle ASM 创建一个 Oracle ASM 文件并为其分配一个以加号 () 开头后跟磁盘组名称的名称例如DISK1。注意Oracle ASM 文件可以与其他存储管理选项如第三方文件系统共存。此功能简化了将 Oracle ASM 集成到现有环境中的过程。Oracle ASM 区Oracle ASM 区是 Oracle ASM 文件的一部分。一个 Oracle ASM 文件由一个或多个文件区组成。每个 Oracle ASM 区由特定磁盘上的一个或多个分配单元组成。注意Oracle ASM 区不同于用于在段中存储数据的区。Oracle ASM 分配单元Oracle ASM 分配单元是磁盘组内的基本分配单元。分配单元是 Oracle ASM 所分配的最小连续磁盘空间。一个或多个分配单元形成一个 Oracle ASM 区。另请参见《Oracle 自动存储管理管理员指南》了解有关 Oracle ASM 的更多信息Oracle ASM InstancesOracle ASM 实例Oracle ASM 实例是管理 Oracle ASM 磁盘的特殊 Oracle 实例。Oracle ASM 实例和数据库实例都需要对 Oracle ASM 磁盘组中的磁盘具有共享访问权限。Oracle ASM 实例管理磁盘组的元数据并向数据库实例提供文件布局信息。数据库实例将 I/O 直接定向到 Oracle ASM 磁盘而无需通过 Oracle ASM 实例。Oracle ASM 实例基于与数据库实例相同的技术构建。例如Oracle ASM 实例具有系统全局区SGA和后台进程这些与数据库实例的后台进程相似。但是Oracle ASM 实例无法装载数据库并且执行的任务比数据库实例少。图 14-3 显示了一个单节点配置其中包含一个 Oracle ASM 实例和两个数据库实例每个数据库实例都与一个不同的单实例数据库相关联。Oracle ASM 实例管理元数据并为存储两个数据库数据的 Oracle ASM 文件提供空间分配。一个 Oracle ASM 磁盘组有四个 Oracle ASM 磁盘另一个有两个磁盘。两个数据库实例都可以访问这些磁盘组。Figure 14-3 Oracle ASM Instance and Database Instances图14-3 Oracle ASM 实例和数据库实例另请参见《Oracle 自动存储管理管理员指南》了解有关 Oracle ASM 的更多信息Oracle Persistent Memory Filestore (PMEM Filestore)Oracle 持久内存文件存储PMEM 文件存储PMEM 是可字节寻址的持久内存。Oracle 持久内存文件存储PMEM 文件存储可以存储数据文件、在线重做日志文件和控制文件。查询可以直接从 PMEM 读取字节而无需先将块迁移到数据库缓冲区高速缓存中。这种高性能机制避免了数据冗余和不必要的 I/O。注意PMEM 文件存储不能存储跟踪文件、审计文件或服务器参数文件。PMEM 支持的文件类型与 Oracle ASM 支持的类型相似。Directly Mapped Buffer Cache直接映射缓冲区高速缓存在传统存储金字塔中PMEM 位于非持久性的 DRAM 和持久性非易失性的闪存之间。File System Interface for PMEM FilestorePMEM 文件存储的文件系统接口PMEM 文件存储实现了一种称为用户空间文件系统FUSE的协议。User Interface for PMEM FilestorePMEM 文件存储的用户接口要创建 PMEM 文件存储请使用CREATE PMEM FILESTORE命令。Directly Mapped Buffer Cache直接映射缓冲区高速缓存在传统存储金字塔中PMEM 位于非持久性的 DRAM 和持久性非易失性的闪存之间。Figure 14-4 Storage Pyramid图14-4 存储金字塔数据库缓冲区高速缓存驻留在 DRAM 中。Oracle 进程可以直接按字节寻址访问 PMEM 文件存储中的块这些块被映射到数据库缓冲区高速缓存。当将数据文件放置在 PMEM 文件存储中时会自动调用此映射机制。Oracle AI 数据库使用内部算法来决定是否将数据块从 PMEM 文件存储迁移到 DRAM 中。迁移的典型原因包括 DML 修改、读一致性以及更快访问热数据块。另请参见“DRAM and PMEM BuffersDRAM 和 PMEM 缓冲区”File System Interface for PMEM FilestorePMEM 文件存储的文件系统接口PMEM 文件存储实现了一种称为用户空间文件系统FUSE的协议。FUSE 使非特权操作系统用户如 Oracle AI 数据库软件所有者能够创建和管理文件系统及其中的目录和文件。例如可以使用cp、rm和ls命令。典型的文件系统使用原始存储作为其后备存储而 PMEM 文件存储从 PMEM DAX 文件系统中的本地操作系统文件获取存储。此文件称为后备文件在操作系统中显示为一个文件。PMEM 文件存储细分后备文件中的存储并将其呈现为本地文件系统。另请参见《Oracle AI 数据库管理员指南》了解有关 PMEM 文件存储的更多信息User Interface for PMEM FilestorePMEM 文件存储的用户接口要创建 PMEM 文件存储请使用CREATE PMEM FILESTORE命令。PMEM 文件存储在创建后会自动挂载。PMEM 文件存储会在指定的挂载点下显示如同一个本地文件系统。PMEM_FILESTORE初始化参数指定数据库实例在启动时自动挂载的 PMEM 文件存储。该参数设置为一个有序的字符串对。参数值列表中的第一个字符串是挂载 PMEM 文件存储的目录。第二个字符串是后备文件。V$PMEM_FILESTORE显示有关 PMEM 文件存储的元数据。例如可以查看挂载点的目录路径、后备文件的文件路径以及文件存储的大小。另请参见《Oracle AI 数据库管理员指南》了解如何创建和管理 PMEM 文件存储Overview of Data Files数据文件概述在操作系统级别Oracle AI 数据库将数据存储在称为数据文件的结构中。每个 Oracle 数据库无论是 CDB 还是 PDB都必须至少有一个数据文件。Use of Data Files数据文件的使用Oracle AI 数据库将表空间数据物理存储在数据文件中。Permanent and Temporary Data Files永久和临时数据文件永久表空间包含持久模式对象。永久表空间中的对象存储在数据文件中。Online and Offline Data Files在线和离线数据文件每个数据文件要么在线可用要么离线不可用。Data File Structure数据文件结构Oracle AI 数据库通过分配指定的磁盘空间加上数据文件头的开销来为表空间创建数据文件。Oracle AI 数据库在其下运行的操作系统负责在将文件分配给数据库之前清除文件中的旧信息和授权。Use of Data Files数据文件的使用Oracle AI 数据库将表空间数据物理存储在数据文件中。每个非分区模式对象和对象的每个分区都存储在其自己的段中该段仅属于一个表空间。例如非分区表的数据存储在单个段中该段又存储在一个表空间中。表空间和数据文件密切相关但有以下重要区别每个表空间由一个或多个数据文件组成这些数据文件符合运行 Oracle AI 数据库的操作系统。数据库的数据集中存储在数据库的每个表空间所在的数据文件中。一个段可以跨越一个或多个数据文件但不能跨越多个表空间。CDB 必须具有SYSTEM和SYSAUX表空间。CDB 内的每个 PDB 都有自己的SYSTEM和SYSAUX表空间。Oracle AI 数据库在数据库创建期间自动为SYSTEM表空间分配任何数据库的第一个数据文件。SYSTEM表空间包含数据字典它是一组包含数据库元数据的表。通常数据库还有一个撤销表空间和一个临时表空间通常命名为TEMP。下图显示了表空间、数据文件和段之间的关系。Figure 14-5 Data Files and Tablespaces图14-5 数据文件和表空间另请参见“Overview of Tablespaces表空间概述”《Oracle AI 数据库管理员指南》了解如何管理数据文件Permanent and Temporary Data Files永久和临时数据文件永久表空间包含持久模式对象。永久表空间中的对象存储在数据文件中。临时表空间仅在会话期间包含模式对象。本地管理的临时表空间具有临时文件temp files这些是专门设计用于在哈希、排序和其他操作中存储数据的特殊文件。当内存空间不足时临时文件也存储结果集数据。临时文件与永久数据文件相似但有以下例外诸如表之类的永久数据库对象永远不会存储在临时文件中。临时文件始终设置为NOLOGGING模式这意味着它们永远不会为其生成重做记录。介质恢复不能识别临时文件。不能将临时文件设置为只读。不能使用ALTER DATABASE语句创建临时文件。创建或调整临时文件大小时并不总是保证为指定文件大小分配磁盘空间。在诸如 Linux 和 UNIX 等文件系统上临时文件被创建为稀疏文件。在这种情况下磁盘块不是在文件创建或调整大小时分配而是在首次访问这些块时才分配。注意稀疏文件可以快速创建和调整临时文件大小但是以后访问临时文件时磁盘可能会耗尽空间。临时文件信息显示在数据字典视图DBA_TEMP_FILES和动态性能视图V$TEMPFILE中但不在DBA_DATA_FILES或V$DATAFILE视图中显示。另请参见“Temporary Tablespaces临时表空间”《Oracle AI 数据库管理员指南》了解如何管理临时文件Online and Offline Data Files在线和离线数据文件每个数据文件要么在线可用要么离线不可用。可以通过使单个数据文件或临时文件离线或将其恢复到在线状态来更改其可用性。在将离线数据文件恢复到在线状态之前数据库无法访问它们。可能出于多种原因将数据文件离线包括执行离线备份或出现块损坏。如果数据库无法写入数据文件它会自动将数据文件离线。与数据文件一样表空间本身也可以离线或在线。当使在线表空间中的数据文件离线时表空间本身仍保持在线状态。可以通过使表空间本身离线来使其所有数据文件暂时不可用。从 Oracle Database 12c 开始可以使用ALTER DATABASE MOVE DATAFILE语句在数据库打开并访问文件的同时将在线数据文件从一个物理文件移动到另一个物理文件。可以使用此技术来实现以下目标将表空间从一种存储迁移到另一种存储将不常访问的数据文件移动到成本较低的存储使表空间只读并将其数据文件移动到一次写入的存储例如一次写入多次读取WORM驱动器将数据库迁移到 Oracle ASM另请参见“Online and Offline Tablespaces在线和离线表空间”《Oracle AI 数据库管理员指南》了解如何更改数据文件可用性《Oracle AI 数据库管理员指南》了解如何移动在线数据文件《Oracle AI 数据库 SQL 语言参考》了解ALTER DATABASE ... MOVE DATAFILE语句Data File Structure数据文件结构Oracle AI 数据库通过分配指定的磁盘空间加上数据文件头的开销来为表空间创建数据文件。Oracle AI 数据库在其下运行的操作系统负责在将文件分配给数据库之前清除文件中的旧信息和授权。数据文件头包含有关数据文件的元数据如其大小和检查点 SCN。每个头包含一个绝对文件号它在数据库内唯一标识数据文件以及一个相对文件号它在表空间内唯一标识数据文件。当 Oracle AI 数据库首次创建数据文件时分配的磁盘空间已格式化但不包含任何用户数据。但是数据库会保留该空间以便为关联表空间的未来段保存数据。随着表空间中数据的增长Oracle AI 数据库使用数据文件中的空闲空间为段分配区。下图说明了数据文件中不同类型的空间。区要么是已使用的意味着它们包含段数据要么是空闲的意味着它们可供重用。随着时间的流逝表空间内对象的更新和删除可能会产生一些零散的空闲空间这些空间各自都不足以重用于新数据。这种类型的空闲空间称为碎片化的空闲空间。Figure 14-6 Space in a Data File图14-6 数据文件中的空间另请参见《Oracle AI 数据库管理员指南》了解如何查看数据文件信息Overview of Control Files控制文件概述数据库控制文件是一个仅与一个 CDB 关联的小型二进制文件。每个 CDB 都有一个唯一的控制文件尽管允许多个相同的副本存在。PDB 没有单独的控制文件。Use of Control Files控制文件的使用Oracle AI 数据库使用控制文件来定位数据库文件并通常管理数据库的状态。Multiple Control Files多个控制文件Oracle AI 数据库允许多个相同的控制文件同时打开并写入同一个数据库。通过多路复用在不同的磁盘上放置控制文件数据库可以实现冗余从而避免单点故障。Control File Structure控制文件结构关于数据库的信息存储在控制文件的不同部分。每个部分都是一组关于数据库某个方面的记录。Use of Control Files控制文件的使用Oracle AI 数据库使用控制文件来定位数据库文件并通常管理数据库的状态。控制文件包含如下信息数据库名称和数据库唯一标识符DBID数据库创建的时间戳关于数据文件、在线重做日志文件和归档重做日志文件的信息表空间信息RMAN 备份控制文件服务于以下目的它包含打开数据库所需的数据文件、在线重做日志文件等的信息。控制文件跟踪数据库的结构更改。例如当管理员添加、重命名或删除数据文件或在线重做日志文件时数据库会更新控制文件以反映此更改。它包含在数据库未打开时必须可访问的元数据。例如控制文件包含恢复数据库所需的信息包括检查点。检查点指示重做流中的 SCN实例恢复需要从该点开始。在检查点 SCN 之前的每个已提交更改都保证保存在磁盘上的数据文件中。至少每三秒钟检查点进程就会在控制文件中记录关于在线重做日志中检查点位置的信息。Oracle AI 数据库在数据库使用期间连续读取和写入控制文件并且在数据库打开的任何时候都必须可供写入。例如恢复数据库涉及从控制文件中读取数据库中包含的所有数据文件的名称。其他操作如添加数据文件会更新存储在控制文件中的信息。另请参见“Overview of Instance Recovery实例恢复概述”“Checkpoint Process (CKPT)检查点进程CKPT”《Oracle AI 数据库管理员指南》了解如何管理控制文件Multiple Control Files多个控制文件Oracle AI 数据库允许多个相同的控制文件同时打开并写入同一个数据库。通过多路复用在不同的磁盘上放置控制文件数据库可以实现冗余从而避免单点故障。注意Oracle 建议您维护多个控制文件副本每个副本放在不同的磁盘上。如果某个控制文件变得不可用那么当数据库实例尝试访问损坏的控制文件时实例将失败。如果存在其他当前的控制文件副本则可以重新装载数据库并打开它而无需进行介质恢复。但是如果数据库的所有控制文件都丢失了那么数据库实例将失败并且需要进行介质恢复。如果由于没有当前副本而必须使用控制文件的旧备份则介质恢复将不会很简单。另请参见《Oracle AI 数据库管理员指南》了解如何维护多个控制文件《Oracle AI 数据库备份和恢复用户指南》了解如何备份和恢复控制文件Control File Structure控制文件结构关于数据库的信息存储在控制文件的不同部分。每个部分都是一组关于数据库某个方面的记录。例如控制文件中的一个部分跟踪数据文件并包含一组记录每个数据文件对应一条记录。每个部分存储在多个逻辑控制文件块中。记录可以跨越一个部分内的多个块。控制文件包含以下类型的记录循环重用记录循环重用记录包含非关键信息如果需要这些信息有资格被覆盖。当所有可用的记录槽已满时数据库要么扩展控制文件以为新记录腾出空间要么覆盖最旧的记录。示例包括关于归档重做日志文件和 RMAN 备份的记录。非循环重用记录非循环重用记录包含不经常更改且不能被覆盖的关键信息。信息示例包括表空间、数据文件、在线重做日志文件和重做线程。Oracle AI 数据库永远不会重用这些记录除非从表空间中删除了相应的对象。可以查询动态性能视图也称为 V$ 视图来查看存储在控制文件中的信息。例如可以查询V$DATABASE来获取数据库名称和 DBID。但是只有数据库才能修改控制文件中的信息。读取和写入控制文件块与读取和写入数据块不同。对于控制文件Oracle AI 数据库直接从磁盘读取和写入到程序全局区PGA。每个进程为其控制文件块分配一定量的 PGA 内存。另请参见“Overview of the Dynamic Performance Views动态性能视图概述”《Oracle AI 数据库参考》了解V$CONTROLFILE_RECORD_SECTION视图《Oracle AI 数据库参考》了解CONTROL_FILE_RECORD_KEEP_TIME初始化参数Overview of the Online Redo Log在线重做日志概述用于恢复的最关键结构是在线重做日志它由两个或多个预分配的文件组成用于在数据库发生更改时存储这些更改。在线重做日志记录对数据文件的更改。Use of the Online Redo Log在线重做日志的使用数据库维护在线重做日志文件以防止数据丢失。具体来说在实例失败后在线重做日志文件使 Oracle AI 数据库能够恢复尚未写入数据文件的已提交数据。How Oracle AI Database Writes to the Online Redo LogOracle AI 数据库如何写入在线重做日志数据库实例的在线重做日志称为重做线程。Structure of the Online Redo Log在线重做日志的结构在线重做日志文件包含重做记录。Use of the Online Redo Log在线重做日志的使用数据库维护在线重做日志文件以防止数据丢失。具体来说在实例失败后在线重做日志文件使 Oracle AI 数据库能够恢复尚未写入数据文件的已提交数据。服务器进程将每个事务同步写入重做日志缓冲区然后由 LGWR 进程将其写入在线重做日志。在线重做日志的内容包括未提交的事务以及模式和对象管理语句。当数据库对撤销段进行更改时数据库也会将这些更改写入在线重做日志。因此在线重做日志始终包含永久对象的撤销数据。可以将数据库配置为将临时对象的所有撤销数据存储在临时撤销段中以节省空间并提高性能或者允许数据库将永久和临时的撤销数据都存储在线重做日志中。Oracle AI 数据库仅将在线重做日志用于恢复。但是管理员可以通过 Oracle LogMiner 实用程序中的 SQL 接口查询在线重做日志文件。重做日志文件是有关数据库活动的历史信息的有用来源。另请参见“Overview of Instance Recovery实例恢复概述”“Temporary Undo Segments临时撤销段”“Process Architecture进程架构”了解 Oracle 进程《Oracle AI 数据库管理员指南》了解临时撤销段《Oracle AI 数据库参考》了解TEMP_UNDO_ENABLED初始化参数How Oracle AI Database Writes to the Online Redo LogOracle AI 数据库如何写入在线重做日志数据库实例的在线重做日志称为重做线程。在单实例配置中只有一个实例访问一个数据库因此只有一个重做线程存在。然而在 Oracle Real Application ClustersOracle RAC配置中多个实例同时访问一个数据库每个实例都有自己的重做线程。每个实例都有单独的重做线程可以避免对单组在线重做日志文件的争用。一个在线重做日志由两个或多个在线重做日志文件组成。Oracle AI 数据库要求最少两个文件以保证在另一个文件正在被清除或归档时始终有一个文件可用来写入。Online Redo Log Switches在线重做日志切换Oracle AI 数据库一次仅使用一个在线重做日志文件来存储从重做日志缓冲区写入的记录。Multiple Copies of Online Redo Log Files在线重做日志文件的多个副本Oracle AI 数据库可以自动在单独的位置维护两个或多个相同的在线重做日志副本。Archived Redo Log Files归档重做日志文件归档重做日志文件是在线重做日志组中已填满成员的副本。另请参见《Oracle Real Application Clusters 管理和部署指南》了解 Oracle RAC 中的在线重做日志组Online Redo Log Switches在线重做日志切换Oracle AI 数据库一次仅使用一个在线重做日志文件来存储从重做日志缓冲区写入的记录。日志写入进程LGWR正在主动写入的在线重做日志文件称为当前在线重做日志文件。当日志写入进程停止写入一个在线重做日志文件并开始写入另一个时就会发生日志切换。通常切换发生在当前在线重做日志文件已满且必须继续写入时。但是可以配置日志切换定期发生而不管当前在线重做日志文件是否已填满并可以强制手动进行日志切换。日志写入进程循环写入在线重做日志文件。当日志写入进程填满最后一个可用的在线重做日志文件时该进程会写入第一个日志文件重新开始循环。图 14-7 说明了重做日志的循环写入。Figure 14-7 Reuse of Online Redo Log Files图14-7 在线重做日志文件的重用图 14-7 中的数字显示了 LGWR 写入每个在线重做日志文件的顺序。当发生日志切换且日志写入进程开始向一个文件写入时数据库会为该文件分配一个新的日志序列号。当数据库重用在线重做日志文件时此文件将接收下一个可用的日志序列号。已填满的在线重做日志文件是否可供重用取决于归档模式如果禁用归档这意味着数据库处于NOARCHIVELOG模式那么在数据库写入进程DBW将其记录的更改通过检查点写入到磁盘后已填满的在线重做日志文件即可供使用。如果启用归档这意味着数据库处于ARCHIVELOG模式那么在更改已写入数据文件且该文件已被归档后已填满的在线重做日志文件可由日志写入进程使用。在某些情况下可能会阻止日志写入进程重用现有的在线重做日志文件。活动在线重做日志文件是实例恢复所必需的而非活动在线重做日志文件不是实例恢复所必需的。此外在线重做日志文件可能正处于被清除的过程中。另请参见“Overview of Background Processes后台进程概述”《Oracle AI 数据库管理员指南》了解如何管理在线重做日志Multiple Copies of Online Redo Log Files在线重做日志文件的多个副本Oracle AI 数据库可以自动在单独的位置维护两个或多个相同的在线重做日志副本。一个在线重做日志组由一个在线重做日志文件及其冗余副本组成。每个相同的副本都是该在线重做日志组的一个成员。每个组由一个数字定义例如组 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 从不同时写入不同组的成员。Figure 14-8 Multiple Copies of Online Redo Log Files图14-8 在线重做日志文件的多个副本注意Oracle 建议您多路复用在线重做日志。如果需要恢复日志文件的丢失可能是灾难性的。当您多路复用在线重做日志时数据库必须增加其执行的 I/O 量。根据您的系统这种额外的 I/O 可能会影响整体数据库性能。另请参见《Oracle AI 数据库管理员指南》了解如何维护在线重做日志文件的多个副本《Oracle Data Guard 概念和管理》了解 Data Guard 配置成员之间重做数据的自动传输Archived Redo Log Files归档重做日志文件归档重做日志文件是在线重做日志组中已填满成员的副本。归档重做日志文件不被认为是数据库的一部分。确切地说它是由数据库创建并写入用户指定位置的在线重做日志文件的离线副本。归档重做日志文件是备份和恢复策略的关键部分。可以使用归档重做日志文件来恢复数据库备份更新备用数据库使用 Oracle LogMiner 实用程序获取有关数据库历史的信息生成归档重做日志文件的操作称为归档。此操作可以是自动的也可以是手动的。仅在数据库处于ARCHIVELOG模式时才有可能。归档重做日志文件包括重做条目以及在线重做日志组中相同成员的日志序列号。在在线重做日志文件的多个副本中文件A_LOG1和B_LOG1是组 1 的相同成员。如果数据库处于ARCHIVELOG模式并且启用了自动归档那么归档进程ARCn将归档其中一个文件。如果A_LOG1损坏则该进程可以归档B_LOG1。归档重做日志包含从您启用归档时开始存在的每个重做日志组的副本。另请参见《Oracle AI 数据库实用程序》了解 Oracle LogMiner《Oracle AI 数据库管理员指南》了解如何管理归档重做日志《Oracle Data Guard 概念和管理》了解如何配置备用重做日志归档Structure of the Online Redo Log在线重做日志的结构在线重做日志文件包含重做记录。一个重做记录由一组更改向量组成每个更改向量描述了对一个数据块的一次更改。例如对employees表中薪水的更新会生成一个重做记录该记录描述了对此表的数据段块、撤销段数据块以及撤销段的事务表所做的更改。重做记录包含更改的所有相关元数据包括更改的 SCN 和时间戳生成更改的事务的事务 ID事务提交时的 SCN 和时间戳如果已提交进行更改的操作类型被修改的数据段的名称和类型另请参见“Overview of Data Blocks数据块概述”