物理存储结构

物理结构可以在操作系统级别查看。

物理存储结构简介

RDBMS 的特点之一是逻辑数据结构(如表、 视图和索引)与物理存储结构的独立性。由于物理结构和逻辑结构是分开的,您可以管理数据的物理数据存储,而不会影响对逻辑结构的访问。例如,重命名数据库文件并不会重命名存储在其中的表。

Oracle 数据库是在持久性的磁盘存储中存储的一组 Oracle 数据文件。此部分讨论您发出CREATE DATABASE语句时生成的数据库文件:

 数据文件和临时文件

数据文件是磁盘上的一个物理文件,由Oracle 数据库创建,并包含如表和索引之类的数据结构。临时文件是一个属于临时表空间的数据文件。数据按Oracle 专有格式写入这些文件,且不能由其他程序读取

 控制文件

控制文件是一个跟踪数据库的物理组件的根文件

 联机重做日志文件

在线重做日志是一组包含对数据所做的更改记录的文件。

数据库实例是一组管理数据库文件的内存结构。图 11-1 显示实例和它所管理的文件之间的关系。

这里写图片描述

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

有几种机制可用于分配和管理这些文件的存储。最常见的机制包括:

 Oracle 自动存储管理(Oracle ASM)

Oracle ASM 包括被专门设计用来供Oracle 数据库使用的文件系统。

 操作系统文件系统

大多数 Oracle 数据库在文件系统中存储文件,这是建立在一个连续的磁盘地址空间内的数据结构。所有操作系统都有文件管理器,用于在文件系统中为文件分配和释放磁盘空间

文件系统可以将磁盘空间分配给多个文件。每个文件都有一个名称,并对应用程序(如 Oracle 数据库)显示为一个连续地址空间。数据库可以创建、 读取、 写入、 调整大小、和删除文件。

文件系统通常是由称为逻辑卷管理器 (LVM)的软件包创建,并建立在逻辑卷的基础上。LVM 使多个物理磁盘被合并到一个单一的连续地址空间,对上层软件显示为一块磁盘

 原始设备

原始设备是一些磁盘分区,或未使用文件系统格式化的逻辑卷。原始设备的主要好处是能够执行直接 I/O 操作,并按更大的缓冲区写入。对于直接 I/O, 应用程序直接向存储设备写入或从存储设备读取,绕过操作系统缓冲区高速缓存。

注意:

现在许多文件系统都支持数据库和其他应用程序的直接 I/O,让它们自己管理自己的缓存。历史上,原始设备曾被作为实施直接 I/O 的唯一手段。

集群文件系统

集群文件系统是使多台计算机共享文件存储,同时保持一致的空间分配和文件内容的软件。在 Oracle RAC 环境中,集群文件系统使共享存储显示为在集群环境中由多台计算机共享的文件系统。在集群文件系统中,单个集群中的计算机失败不会使文件系统不可用。而在操作系统文件系统中,倘若某个通过 NFS 或其他手段共享文件的计算机失败,则文件系统会变得不可用。

数据库可以采用前面的某些存储机制的组合。例如,数据库可以将控制文件和联机重做日志文件存储在传统的文件系统中,将某些用户数据文件存储在原始分区上,剩余的数据文件存储在 Oracle ASM 中,而归档重做日志文件存储到集群文件系统。

Oracle 自动存储管理 (Oracle ASM)

Oracle ASM 是一个针对 Oracle 数据库文件的高性能、 易管理的存储解决方案。Oracle ASM 是一个卷管理器,并提供一个专为数据库使用而设计的文件系统
Oracle ASM 提供几个超越传统文件系统和存储管理器的优势,包括以下这些:

 简化了与存储相关的任务,如创建数据库、规划数据库文件布局、和管理磁盘空间

 跨物理磁盘分布数据,以消除热点,并提供均匀的磁盘性能

 在存储配置更改后自动平衡数据

若要使用 Oracle ASM,你需要为Oracle 数据库分配磁盘分区,最好是经过条带化和镜像的。Oracle ASM 会管理磁盘空间,跨所有可用资源分配 I/O 负载,以优化性能,同时消除了手动优化 I/O的需要。例如,你可以为数据库增加磁盘大小,或将数据库的某些部分移动到新设备,而不必关闭数据库。

Oracle ASM 存储组件

Oracle 数据库可以将数据文件存储为一个Oracle ASM 磁盘组中的Oracle ASM 文件,Oracle ASM磁盘组是一个磁盘的集合,被Oracle ASM作为一个单元来管理。在一个磁盘组内, Oracle ASM 为数据库文件提供了一个文件系统接口。

图 11-2 显示了一个使用 Oracle ASM的数据库中的存储组件之间的关系。虽然 Oracle ASM 可以存储其他类型的文件,该图只描述了一个 Oracle ASM 文件和数据文件之间的关系。乌鸦脚表示法表示一对多关系。

这里写图片描述

图 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 ASM分配单元

分配单元是磁盘组中空间分配的基本单位。分配单元是由Oracle ASM 分配的最小连续磁盘空间。由一个或多个分配单元形成一个 Oracle ASM 扩展区。

Oracle ASM实例

Oracle ASM 实例是一个专门用于管理 Oracle ASM 磁盘的Oracle 实例。ASM实例和数据库实例都需要对ASM 磁盘组中的磁盘的共享访问。ASM 实例管理磁盘组的元数据,并提供对数据库实例的文件布局信息。数据库实例直接与 ASM 磁盘进行I/O ,而不需要通过 ASM 实例。

ASM 实例与数据库实例建立在相同的技术架构之上。例如,与数据库实例类似, ASM 实例也有一个系统全局区域 (SGA) 和多个后台进程。但是,ASM 实例无法装载数据库,并且比数据库实例执行的任务更少。

图 11-3 显示了具有一个 Oracle ASM 实例和两个数据库实例的单节点配置,每个数据库实例与一个不同的单实例数据库相关联。ASM 实例管理元数据,并为用于这两个数据库存储数据的 ASM 文件提供空间分配。其中一个 ASM 磁盘组有四个 ASM 磁盘,而另一个磁盘组有两个磁盘。这两个数据库实例可以访问所有磁盘组

这里写图片描述

Oracle 管理的文件和用户管理的文件

Oracle 管理的文件是一种命名策略,使您能够按数据库对象而不是按文件名称来指定操作。例如,您可以创建一个表空间,而无需指定其数据文件的名称。这样一来,Oracle 管理的文件不需要管理员直接管理数据库中的操作系统文件。Oracle ASM 需要使用Oracle 管理的文件。

注意:

此功能不会影响诸如跟踪文件、审计文件、和警报日志等管理性文件的创建或命名。

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

通过初始化参数,您可以指定一个特定类型文件的文件系统目录。Oracle 管理的文件特性可确保数据库能创建具有唯一名称的文件,并在不再需要时删除它。数据库在内部使用标准文件系统接口来创建和删除文件,如数据文件、临时文件、 控制文件、和存储在快速恢复区中的与恢复相关的文件等。

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

数据文件的概述

在操作系统层面, Oracle 数据库将数据库数据存储在数据文件中。每个数据库必须至少有一个数据文件。

使用数据文件

在第一部分,Oracle 关系数据结构中讲述了用于存储用户数据的逻辑结构,其中最重要的是表。每个非分区模式对象和每个对象的分区都存储在其自己的段中。

为便于管理, Oracle 数据库在表空间中为用户数据分配空间。与段类似,表空间也是逻辑存储结构。每个段只属于一个表空间。例如,非分区表的数据存储在单个段中,最终也存储在一个表空间中。

Oracle 数据库将表空间中的数据在物理上存储为数据文件。表空间和数据文件密切相关,但又有重要区别:

 每个表空间包含一个或多个数据文件,这需要遵从运行 Oracle 数据库的操作系统

 数据库数据被集中地存储在位于每个数据库表空间的数据文件中。

 段可以跨越一个或多个数据文件,但它不能跨多个表空间。

 数据库必须有SYSTEM表空间和SYSAUX表空间。Oracle 数据库自动在数据库创建过程中为SYSTEM表空间分配数据库的第一个数据文件。

SYSTEM表空间包含数据字典,它是包含数据库元数据的一组表。通常,数据库也有一个撤销表空间和临时表空间 (通常称为 TEMP)。

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

这里写图片描述

永久和临时数据文件

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

临时表空间中仅包含用于会话期间的模式对象。本地管理的临时表空间具有临时文件,它是被设计用于存储在哈希、 排序、和其他操作使用的数据的特殊文件临时文件还用于存储在内存中的空间不足时的结果集数据

临时文件类似于永久数据文件,但有以下例外情况:

 永久性数据库对象(如表)绝不会存储在临时文件中。

临时文件始终被设置为NOLOGGING模式,这意味着永远不会为其生成重做。介质恢复不识别临时文件

 你不能将临时文件置为只读模式。

你无法使用 ALTER DATABASE 语句来创建一个临时文件

 当你创建临时文件或调整其大小时,并不能始终保证会为他们分配指定文件大小的磁盘空间。在 Linux 和 UNIX 等的文件系统上,临时文件被创建为稀疏文件。在这种情况下,磁盘块并不是在文件的创建或调整大小时分配的,而是在块第一次被访问时分配的。

警告:

稀疏文件使你能够快速地创建临时文件或调整其大小 ;但是,当之后访问临时文件时,可能会超出磁盘空间

临时文件信息显示在数据字典视图 DBA_TEMP_FILES和动态性能视图 V$TEMPFILE中,但不在DBA_DATA_FILES或V$DATAFILE视图中。

联机和脱机数据文件

每个数据文件可能是联机的(可用) 或脱机的(不可用)。可以通过让单个数据文件或临时文件脱机或联机,来改变其可用性。脱机的数据文件不能被访问,直至他们恢复联机状态。

管理员因为很多原因将数据文件脱机,包括执行脱机备份、重命名数据文件、或数据块破坏。如果数据库无法写入数据文件,则数据库自动将其脱机

与数据文件类似,表空间本身也可以是脱机的或联机的。当你将一个联机表空间中的数据文件脱机时,表空间本身将仍保持联机状态。您可以将整个表空间脱机,来使该表空间中的所有数据文件暂时不可用。

数据文件结构

Oracle 数据库通过分配指定数量的磁盘空间,加上数据文件头开销,来为表空间创建数据文件。在Oracle 数据库之下运行的操作系统,负责在将文件分配给数据库之前,从文件中清除旧信息和授权

数据文件头包含数据文件的元数据,例如数据文件大小和检查点SCN。每个文件头包含一个绝对文件号和一个相对文件号。绝对文件号唯一地标识数据库内的数据文件。相对文件号唯一地标识表空间内的数据文件。

当Oracle 数据库刚创建一个数据文件时,分配的磁盘空间已格式化,但不包含任何用户数据。但是,数据库会保留此空间,将来用于容纳其相关联的表空间中的数据段。随着表空间中的数据增长,Oracle 数据库将用数据文件中的可用空间来为段分配扩展区。

图 11-5 说明了数据文件中不同类型的空间。扩展区要么是已使用的,意味着他们包含段数据,或是空闲的,意味着它们是可重用的随时间的流逝,表空间中的对象不断更新和删除,会产生很多小的空白空间,但太小不足以被重用以容纳新数据。这种类型的空白空间称为碎片化的可用空间

这里写图片描述

控制文件的概述

数据库控制文件是一个小的二进制文件,仅与一个数据库相关联。每个数据库有一个唯一的控制文件,尽管它可能维护多个相同的拷贝。

使用控制文件

控制文件是Oracle 数据库用来查找数据库文件,并从总体上管理数据库状态的根文件。控制文件包含以下信息:

 数据库名称和数据库唯一标识符(DBID)
 创建数据库的时间戳
 有关数据文件、 联机重做日志文件、和归档重做日志文件的信息
 表空间信息
 RMAN备份

控制文件用于以下目的:

 它包含有关数据文件、 联机重做日志文件等为打开数据库所需的信息。

控制文件跟踪数据库的结构变化。例如,当管理员添加、 重命名、或删除数据文件或联机重做日志文件时,数据库将更新控制文件以反映此更改。

 它包含未打开数据库时必须可访问的元数据。

例如,控制文件中包含,包括检查点在内的用于恢复数据库所需的信息。检查点指示在重做流中进行实例恢复所需的起始SCN(见”实例恢复概述”)。每一个检查点SCN之前提交的更改被确保已保存到磁盘上的数据文件中。至少每隔三秒,检查点进程会在控制文件中,记录有关联机重做日志中的检查点位置

在数据库使用期间, Oracle 数据库不断读取和写入控制文件,并且只要数据库处于打开状态,控制文件就必须是可用的,以便可以写入。例如,恢复数据库涉及从控制文件中读取数据库中包含的所有数据文件名称。其他的操作,如添加数据文件,会更新存储在控制文件中的信息。

多个控制文件

Oracle 数据库对同一数据库启用多个完全相同的控制文件,并同时打开和写入。通过在不同的磁盘上多路复用控制文件,数据库可以实现冗余,从而避免单点故障。

注意:

Oracle 建议您维护多个控制文件副本,每个都在不同的磁盘上。

如果控制文件变得不可用,则当数据库实例尝试访问已损坏的控制文件时,会遭遇失败。当其他的当前控制文件副本存在时,可以重新装入数据库并打开,而不需进行介质恢复。如果数据库的所有控制文件都丢失了,那么,实例会失败,且需要进行介质恢复如果控制文件的当前副本不可用,而必须使用一个旧备份控制文件,则介质恢复就没那么直截了当了

控制文件结构

有关数据库的信息存储在控制文件的各个不同部分中。每个部分是有关数据库的某个方面的一组记录。例如,控制文件中有一个部分跟踪数据文件,并包含一个记录集合,每一个数据文件有一条记录。每个部分存储在多个逻辑控制文件块中。同一部分的记录可以跨越块

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

 循环重用记录

这些记录包含必要时可以被覆盖的非关键信息。当所有可用的记录槽用完时,数据库要么会扩展控制文件,以便为新记录腾出空间,要么会覆盖最旧的记录。其示例包括有关归档重做日志文件和 RMAN 备份的记录。

 非循环重用记录

这些记录包含不经常更改且不能被覆盖的关键信息。其示例包括表空间、 数据文件、 联机重做日志文件、和重做线程。Oracle 数据库绝不会重用这些记录,除非从表空间中删除相应的对象。

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

控制文件块的读取和写入不同于数据块的读取和写入。对控制文件,Oracle数据库直接从磁盘读取并写入到程序全局区(PGA)。每个进程为控制文件块分配一定的 PGA 内存。

联机重做日志概述

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

使用联机重做日志

数据库维护联机重做日志文件,以防止数据丢失。具体来说,在一个实例失败后,联机重做日志文件使Oracle 数据库可以恢复已提交但尚未写入数据文件的数据

Oracle 数据库将每个事务同步地写入重做日志缓冲区,然后将其写入到联机重做日志。日志的内容包括未提交的事务、撤消数据、和模式和对象管理语句

Oracle 数据库使用联机重做日志的唯一目的是为了恢复。然而,管理员可以通过 Oracle LogMiner 实用程序中的 SQL 接口,来查询联机重做日志文件 。重做日志文件是一种有关数据库活动的有用的历史信息来源。

Oracle 数据库如何写入到联机重做日志

数据库实例的联机重做日志称为重做线程。在单实例配置中,只有一个实例访问数据库,所以只存在一个重做线程。不过在一个Oracle 真正应用集群 (Oracle RAC) 配置中,有两个或更多实例同时访问数据库,且每个实例都有它自己的重做线程。每个实例具有其单独的重做线程可以避免对单一联机重做日志文件组的争用

一个联机重做日志包含两个或更多联机重做日志文件。Oracle 数据库要求最少两个文件,以保证当另一个正在被归档时,总有一个始终可供写入(如果数据库是在归档模式下)。

联机重做日志切换

Oracle 数据库一次只使用一个联机重做日志文件来存储从重做日志缓冲区写入的记录。正在由日志写入器(LGWR) 进程写入的联机重做日志文件称为当前联机重做日志文件。

当数据库停止向一个联机重做日志文件写入,并开始向另一个写入时,发生日志切换。通常,切换发生在当前联机重做日志文件已满,且必须继续写入时。但是,您可以配置定期日志切换,而不论当前联机重做日志文件是否已满,或者也可以手动强制日志切换。

日志写入器以循环方式写入联机重做日志文件。当日志写入器填满最后一个可用的联机重做日志文件时,该进程又向第一个日志文件写入,如此等等,周而复始。图 11-6 说明了重做日志的循环写入。

这里写图片描述

图 11-6 中的数字显示了LGWR 写入到每个联机重做日志文件的顺序。当发生日志切换时,数据库为每个文件分配一个新的日志序列号,然后日志写入器便开始向新的日志写入。当数据库重复使用一个联机重做日志文件时,此文件接收下一个可用的日志序列号。

已填充的联机重做日志文件的可重用性取决于归档模式:

 如果禁用了归档,这意味着数据库处于NOARCHIVELOG模式下,则填充的联机重做日志文件,在数据库写入器 (DBWn) 已对该日志中的更改记录执行过检查点操作并写入到磁盘后,该日志即是可重新使用的

 如果启用了归档,这意味着数据库是在ARCHIVELOG模式下,则填充的联机重做日志文件,只有在该日志中所包含的更改记录被写入数据文件,且该日志已被归档后,该日志才是可重新使用的

在某些情况下,日志写入器可能无法重新使用某个现有的联机重做日志文件。例如,联机重做日志文件可能处于活动状态(实例恢复需要它),而不是非活动状态 (实例恢复不需要它)。另外,一个联机重做日志文件可能正处于被清除过程中。

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

Oracle 数据库可以在不同的位置自动维护两个或更多联机重做日志的相同副本。一个联机重做日志组包括一个联机重做日志文件及其冗余副本。每个完全相同的副本是联机重做日志组的一个成员。每个组由一个数字来定义,如组 1、 组 2等等。

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

在图 11-7中, A_LOG1 和 B_LOG1 是组 1的两个相同的成员,A_LOG2 和 B_LOG2 是组2的两个相同的成员。每个组中的所有成员必须具有相同的大小。LGWR 同时写入组 1 (成员 A_LOG1 和 B_LOG1),然后同时写入组 2 (成员 A_LOG2 和 B_LOG2),然后又重新写入到组 1,如此等等。LGWR 永远不会同时写入不同组的成员

这里写图片描述

注意:

Oracle 建议你多路复用联机重做日志。如果需要进行恢复,则日志文件丢失可能是灾难性的。当你多路复用联机重做日志文件时,数据库所执行的 I/O肯定会增加。取决于您的系统,这种额外的 I/O 可能会影响数据库的总体性能。

归档重做日志文件

归档重做日志文件是联机重做日志组的已填充成员的副本此文件不是该数据库的一部分,而是由该数据库生成、并被写到用户指定位置的联机重做日志文件脱机副本

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

 恢复数据库备份
 更新备用数据库
 使用 LogMiner 实用程序获取有关数据库的历史信息

归档即是生成一个归档重做日志文件操作。归档可以是自动的或手动的,只有在数据库处于归档模式下时才会归档。

一个归档重做日志文件包括重做条目和联机重做日志组的相同成员的日志序列号。在图 11-7中,文件A_LOG1 和 B_LOG1是组 1的相同成员。如果数据库处于ARCHIVELOG模式下,并启用了自动归档,则归档器进程 (ARCn) 将存档这些文件之一。如果A_LOG1损坏了,则该进程可以归档 B_LOG1归档重做日志包含自您启用存档以来创建的每个日志组的副本

联机重做日志的结构

联机重做日志文件包含重做记录。重做记录由一组更改向量组成,每个向量描述对某数据块的一个更改。例如,对employees表中的薪水的更新,将生成一个重做记录,描述对该表的数据段块、 回滚段数据块、和回滚段的事务表的更改。

重做记录记录了与更改相关的所有元数据,包括如下:

 更改的SCN和时间戳
 变更事务的事务 ID
 事务提交时的SCN和时间戳(如果它已提交)
 所做更改的操作类型
 被修改的数据段的名称和类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值