物理存储结构简介
Oracle 数据库是在持久性的磁盘存储中存储的一组 Oracle 数据文件。此部分讨论您发出 CREATE DATABASE 语句时生成的数据库文件:
-
数据文件和临时文件
数据文件是磁盘上的一个物理文件,由 Oracle 数据库创建,并包含如表和索引之类的数据结构。临时文件是一个属于临时表空间的数据文件。 数据按 Oracle 专有格式写入这些文件,且不能由其他程序读取。 -
控制文件
控制文件是一个跟踪数据库的物理组件的根文件。
-
联机重做日志文件
在线重做日志是一组包含对数据所做的更改记录的文件。
图 11-1 数据库实例和数据库文件
Description of "Figure 11-1 Database Instance and Database Files"
另见:
-
《Oracle Database Administrator’s Guide》了解如何创建数据库
-
《Oracle Database SQL Language Reference》有关 CREATE DATABASE 的语义和语法
用于存储数据库文件的机制
有几种机制可用于分配和管理这些文件的存储。
最常见的机制包括:
-
Oracle 自动存储管理(Oracle ASM)
Oracle ASM 包括被专门设计用来供 Oracle 数据库使用的文件系统。
-
操作系统文件系统
大多数 Oracle 数据库在文件系统中存储文件,这是建立在一个连续的磁盘地址空间内的数据结构。所有操作系统都有文件管理器,用于在文件系统中为文件分配和释放磁盘空间。文件系统可以将磁盘空间分配给多个文件。每个文件都有一个名称,并对应用程序(如 Oracle 数据库) 显示为一个连续地址空间。数据库可以创建、 读取、 写入、 调整大小、 和删除文件。文件系统通常是由称为逻辑卷管理器 (LVM)的软件包创建,并建立在逻辑卷的基础上。 LVM 使多个物理磁盘被合并到一个单一的连续地址空间,对上层软件显示为一块磁盘。 -
集群文件系统
集群文件系统是使多台计算机共享文件存储,同时保持一致的空间分配和文件内容的软件。在 Oracle RAC 环境中,集群文件系统使共享存储显示为在集群环境中由多台计算机共享的文件系统。 在集群文件系统中,单个集群中的计算机失败不会使文件系统不可用。 而在操作系统文件系统中,倘若某个通过 NFS 或其他手段共享文件的计算机失败,则文件系统会变得不可用。
另见:
-
"Oracle Automatic Storage Management (Oracle ASM)"
-
《Oracle Database 2 Day DBA》了解如何使用Oracle Enterprise Manager database Express (EM Express)查看数据库存储结构
-
《Oracle Database Administrator’s Guide》通过查询数据库视图来查看数据库存储结构
Oracle 自动存储管理 (Oracle ASM)
Oracle ASM 是一个针对 Oracle 数据库文件的高性能、 易管理的存储解决方案。 Oracle ASM 是一个卷管理器,并提供一个专为数据库使用而设计的文件系统。
- 简化了与存储相关的任务,如创建数据库、规划数据库文件布局、 和管理磁盘空间
-
跨物理磁盘分布数据,以消除热点,并提供均匀的磁盘性能
-
在存储配置更改后自动平衡数据
Oracle ASM 存储组件
下图显示了一个使用 Oracle ASM 的数据库中的存储组件之间的关系。虽然 Oracle ASM 可以存储其他类型的文件,该图只描述了一个 Oracle ASM文件和数据文件之间的关系。 乌鸦脚表示法表示一对多关系。
图 11-2 Oracle ASM 组件
Description of "Figure 11-2 Oracle ASM Components"
图 11-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 ASM 文件
Oracle ASM 文件是一个存储在 Oracle ASM 磁盘组中的文件。Oracle 数据库按文件与 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 Automatic Storage Management Administrator's Guide》了解 Oracle ASM
Oracle ASM 实例
Oracle ASM 实例是一个专门用于管理 Oracle ASM 磁盘的 Oracle 实例。
图 11-3 Oracle ASM 实例和数据库实例
Description of "Figure 11-3 Oracle ASM Instance and Database Instances "
另见:
《Oracle Automatic Storage Management Administrator's Guide》了解 Oracle ASM
Oracle 管理的文件和用户管理的文件
Oracle 管理的文件是一种命名策略,使您能够按数据库对象而不是按文件名称来指定操作。 例如, 您可以创建一个表空间,而无需指定其数据文件的名称。
另见:
-
"Overview of Diagnostic Files"
-
《Oracle Database Administrator’s Guide》了解如何使用 Oracle 管理的文件
数据文件的概述
使用数据文件
Oracle 数据库将表空间中的数据在物理上存储为数据文件。
每个非分区模式对象和对象的每个分区都存储在它自己的段中,它只属于一个表空间。例如,非分区表的数据存储在单个段中,最终也存储在一个表空间中。表空间和数据文件密切相关, 但又有重要区别:
- 每个表空间包含一个或多个数据文件, 这需要遵从运行 Oracle 数据库的操作系统。
-
数据库数据被集中地存储在位于每个数据库表空间的数据文件中。
-
段可以跨越一个或多个数据文件,但它不能跨多个表空间。
- 数据库必须有 SYSTEM 表空间和 SYSAUX 表空间。 Oracle 数据库自动在数据库创建过程中为 SYSTEM 表空间分配数据库的第一个数据文件。SYSTEM 表空间包含数据字典,它是包含数据库元数据的一组表。通常,数据库也有一个撤销表空间和临时表空间 (通常称为 TEMP)。
下图显示了表空间、 数据文件、 和段之间的关系。
图 11-4 数据文件和表空间
Description of "Figure 11-4 Data Files and Tablespaces"
另见:
-
"Overview of Tablespaces"
-
《Oracle Database Administrator’s Guide》了解如何管理数据文件
永久和临时数据文件
临时文件类似于永久数据文件,但有以下例外情况:
-
永久性数据库对象(如表) 绝不会存储在临时文件中。
- 临时文件始终被设置为 NOLOGGING 模式,这意味着永远不会为其生成重做。 介质恢复不识别临时文件。
-
你不能将临时文件置为只读模式。
-
你无法使用 ALTER DATABASE 语句来创建一个临时文件。
- 当你创建临时文件或调整其大小时,并不能始终保证会为他们分配指定文件大小的磁盘空间。在 Linux 和 UNIX 等的文件系统上, 临时文件被创建为稀疏文件。在这种情况下, 磁盘块并不是在文件的创建或调整大小时分配的,而是在块第一次被访问时分配的。
- 临时文件信息显示在数据字典视图 DBA_TEMP_FILES 和动态性能视图 V$TEMPFILE 中,但不在 DBA_DATA_FILES 或 V$DATAFILE 视图中。
另见:
-
"Temporary Tablespaces"
-
《Oracle Database Administrator’s Guide》了解如何管理临时文件
联机和脱机数据文件
每个数据文件可能是联机的(可用) 或脱机的(不可用)。
从Oracle Database 12c开始,可以使用ALTER Database MOVE DATAFILE语句在数据库打开并访问文件时将在线数据文件从一个物理文件移动到另一个物理文件。您可以使用此技术来实现以下目标:
-
将表空间从一种存储移动到另一种存储
-
移动不常访问的数据文件,以降低存储成本
-
将表空间设置为只读,并将其数据文件移动到写一次存储,比如一次写读多(WORM)驱动器
-
将数据库移动到Oracle ASM中
另见:
-
"Online and Offline Tablespaces"
-
《Oracle Database Administrator’s Guide》了解如何更改数据文件的可用性
-
《Oracle Database Administrator’s Guide》了解如何在线移动数据文件
-
《Oracle Database SQL Language Reference》了解
ALTER DATABASE . . . MOVE DATAFILE
数据文件结构
下图说明了数据文件中不同类型的空间。 扩展区要么是已使用的,意味着他们包含段数据,或是空闲的, 意味着它们是可重用的。随时间的流逝,表空间中的对象不断更新和删除,会产生很多小的空白空间,但太小不足以被重用以容纳新数据。这种类型的空白空间称为碎片化的可用空间。
图 11-5 在数据文件中的空间
Description of "Figure 11-5 Space in a Data File"
另见:
《Oracle Database Administrator’s Guide》了解如何查看数据文件的信息
控制文件的概述
使用控制文件
Oracle 数据库通常使用控制文件定位数据库文件并管理数据库的状态。
控制文件包含以下信息:
-
数据库名称和数据库唯一标识符(DBID)
-
创建数据库的时间戳
-
有关数据文件、 联机重做日志文件、和归档重做日志文件的信息
-
表空间信息
-
RMAN 备份
控制文件用于以下目的:
- 它包含有关数据文件、 联机重做日志文件等为打开数据库所需的信息。
控制文件跟踪数据库的结构变化。 例如, 当管理员添加、 重命名、或删除数据文件或联机重做日志文件时,数据库将更新控制文件以反映此更改。
-
它包含未打开数据库时必须可访问的元数据。
例如, 控制文件中包含,包括检查点在内的用于恢复数据库所需的信息。检查点指示在重做流中进行实例恢复所需的起始 SCN。每一个检查点 SCN 之前提交的更改被确保已保存到磁盘上的数据文件中。至少每隔三秒,检查点进程会在控制文件中, 记录有关联机重做日志中的检查点位置。
另见:
-
"Overview of Instance Recovery"
-
"Checkpoint Process (CKPT)"
-
《Oracle Database Administrator’s Guide》了解如何管理控制文件
多个控制文件
另见:
-
《Oracle Database Administrator’s Guide》了解如何维护多个控制文件
-
《Oracle Database Backup and Recovery User’s Guide》了解如何备份和还原控制文件
控制文件结构
控制文件中包含以下类型的记录:
-
循环重用记录
这些记录包含必要时可以被覆盖的非关键信息。当所有可用的记录槽用完时, 数据库要么会扩展控制文件,以便为新记录腾出空间,要么会覆盖最旧的记录。 其示例包括有关归档重做日志文件和 RMAN 备份的记录。 -
非循环重用记录
这些记录包含不经常更改且不能被覆盖的关键信息。 其示例包括表空间、 数据文件、 联机重做日志文件、 和重做线程。 Oracle 数据库绝不会重用这些记录,除非从表空间中删除相应的对象。
控制文件块的读取和写入不同于数据块的读取和写入。对控制文件,Oracle数据库直接从磁盘读取并写入到程序全局区(PGA)。每个进程为控制文件块分配一定的 PGA 内存。
另见:
-
"Overview of the Dynamic Performance Views"
-
《Oracle Database Reference》了解 V$CONTROLFILE_RECORD_SECTION视图
-
《Oracle Database Reference》了解 CONTROL_FILE_RECORD_KEEP_TIME 初始化参数
联机重做日志概述
使用联机重做日志
当数据库更改撤消段时,数据库还将这些更改写入在线重做日志。因此,联机重做日志总是包含永久对象的撤消数据。您可以将数据库配置为将临时对象的所有撤消数据存储在临时撤消段中,这可以节省空间并提高性能,或者允许数据库在在线重做日志中同时存储永久和临时撤消数据。
另见:
-
"Overview of Instance Recovery"
-
"Temporary Undo Segments"
-
"Process Architecture"了解Oracle进程
-
《Oracle Database Administrator’s Guide》了解临时 undo 段
-
《Oracle Database Reference》了解TEMP_UNDO_ENABLED初始化参数
Oracle 数据库如何写入到联机重做日志
数据库实例的联机重做日志称为重做线程。
另见:
《Oracle Real Application Clusters Administration and Deployment Guide》了解在 Oracle RAC 中的联机重做日志组
联机重做日志切换
图 11-6 重用联机重做日志文件
Description of "Figure 11-6 Reuse of Online Redo Log Files"
已填充的联机重做日志文件的可重用性取决于归档模式:
- 如果禁用了归档, 这意味着数据库处于 NOARCHIVELOG 模式下,则填充的联机重做日志文件, 在数据库写入器 (DBWn) 已对该日志中的更改记录执行过检查点操作并写入到磁盘后,该日志即是可重新使用的。
- 如果启用了归档, 这意味着数据库是在 ARCHIVELOG 模式下, 则填充的联机重做日志文件, 只有在该日志中所包含的更改记录被写入数据文件, 且该日志已被归档后,该日志才是可重新使用的。
另见:
-
"Overview of Background Processes"
-
《Oracle Database Administrator’s Guide》了解如何管理联机重做日志
联机重做日志文件的多个副本
图 11-7 联机重做日志文件的多个副本
Description of "Figure 11-7 Multiple Copies of Online Redo Log Files"
另见:
-
《Oracle Database Administrator’s Guide》了解如何维护联机重做日志文件的多个副本
-
《Oracle Data Guard Concepts and Administration》了解在数据保护配置的成员之间自动传输重做数据
归档重做日志文件
归档重做日志文件是备份和恢复策略的关键部分。您可以使用归档重做日志文件:
-
恢复数据库备份
-
更新备用数据库
-
使用 LogMiner 实用程序获取有关数据库的历史信息
另见:
-
"Oracle LogMiner"
-
"Data File Recovery"
-
《Oracle Database Administrator’s Guide》了解如何管理归档重做日志
-
《Oracle Data Guard Concepts and Administration》了解如何配置备用重做日志存档
联机重做日志的结构
联机重做日志文件包含重做记录。
重做记录记录了与更改相关的所有元数据,包括如下:
-
更改的 SCN 和时间戳
-
变更事务的事务 ID
-
事务提交时的 SCN 和时间戳(如果它已提交)
-
所做更改的操作类型
-
被修改的数据段的名称和类型
另见:
"Overview of Data Blocks"