概述

Oracle DB 服务器由一个 Oracle DB 以及一个或多个数据库实例组成。实例由内存结构和后台进程构成。每当启动一个实例时,都会分配一个称为系统全局区 (SGA) 的共享内存区,并启动后台进程。
数据库包括物理结构和逻辑结构。由于物理结构和逻辑结构是分开的,因此管理数据的物理存储时不会影响对逻辑存储结构的访问。
在这里插入图片描述
Oracle 实例使用内存结构和进程来管理和访问数据库。所有内存结构都存在于构成数据库服务器的那些计算机的主内存中。进程是在这些计算机的内存中运行的作业。进程被定义为操作系统中可运行一系列步骤的“控制线程”或机制。

内存结构

在这里插入图片描述
Oracle实例有两个关联的基本内存结构:
1、系统全局区 (SGA)
称为 SGA 组件的共享内存结构组,这些组件包含一个 Oracle DB实例的数据和控制信息。 SGA 由所有服务器和后台进程共享。 SGA 中存储的数据示例包括高速缓存的数据块和共享 SQL 区域。
SGA 是包含实例的数据和控制信息的内存区。 SGA 包含以下数据结构:
• 数据库缓冲区高速缓存: 用于缓存从数据库中检索到的数据块
• 重做日志缓冲区: 用来缓存用于实例恢复的重做信息,直到可以将其写入磁盘中存储的物理重做日志文件
• 共享池: 用于缓存可在用户间共享的各种结构
• 大型池: 为某些大型进程(例如 Oracle 备份和恢复操作)和 I/O 服务器进程提供大型内存分配的可选区域。
• Java 池: 用于 Java 虚拟机 (JVM) 中特定于会话的所有 Java 代码和数据
• 流池: Oracle Streams 使用它来存储捕获和应用操作所需的信息

2、程序全局区 (PGA)
包含某个服务器进程或后台进程的数据及控制信息的内存区域。
PGA 是 Oracle DB 在服务器进程或后台进程启动时创建的非共享内存。服务器进程对PGA 的访问是互斥的。每个服务器进程和后台进程都具有自己的 PGA。
程序全局区 (PGA) 是一个内存区,其中包含每个服务器进程的数据及控制信息。 Oracle 服务器进程为客户机请求提供服务。每个服务器进程都有自己专用的 PGA,其 PGA 在服务器进程启动时创建,对 PGA 的访问权限仅限于该服务器进程,并且只能由代表该服务器进程的 Oracle 代码对 PGA 进行读写。

Oracle DB 使用初始化参数来创建和管理内存结构。管理内存的最简单的方法是允许数据库自动管理和优化内存。要做到这一点(以下操作适用于大多数平台),只需设置目标内存大小初始化参数 (MEMORY_TARGET) 和最大内存大小初始化参数(MEMORY_MAX_TARGET)。

数据库缓冲区高速缓存

在这里插入图片描述
数据库缓冲区高速缓存是 SGA 的一部分,用于存放从数据文件读取的数据块的副本。并行连接到实例的所有用户共享对数据库缓冲区高速缓存的访问。
Oracle DB 用户进程第一次需要特定数据片段时,将在数据库缓冲区高速缓存中搜索数据。
如果该进程在高速缓存中找到数据(称为高速缓存命中),则直接从内存中读取数据。如果进程在高速缓存中找不到数据(称为高速缓存未命中),则在访问数据之前,必须将磁盘上的数据文件中的数据块复制到高速缓存中的缓冲区中。高速缓存命中时访问数据要比高速缓存未命中时访问数据快。
高速缓存中的缓冲区由一个复杂算法管理,该算法组合使用最近最少使用 (LRU) 列表和停靠计数机制。

重做日志缓冲区

在这里插入图片描述
重做日志缓冲区是 SGA 中的循环缓冲区,用于存放有关对数据库所做更改的信息。此信息存储在重做条目中。重做条目包含重建(或重做)由 DML、 DDL 或内部操作对数据库进行的更改所需的信息。如果需要,将使用重做条目进行数据库恢复。
服务器进程更改缓冲区高速缓存时,系统会生成重做条目,并将生成的重做条目写入SGA 中的重做日志缓冲区。重做条目占用缓冲区中连续的顺序空间。 LGWR 后台进程将重做日志缓冲区写入磁盘上的活动重做日志文件(或文件组)中。

共享池

在这里插入图片描述
SGA 的共享池部分包含库高速缓存、数据字典高速缓存、 SQL 查询结果高速缓存、PL/SQL 函数结果高速缓存、并行执行消息的缓冲区以及控制结构。
“数据字典”是数据库表和视图(它们包含有关数据库、数据库结构及其用户的参考信息)的集合。在 SQL 语句语法分析期间, Oracle DB 会频繁访问数据字典。该访问操作对于Oracle DB 的持续操作来说至关重要。
Oracle DB 对数据字典的访问十分频繁,因此在内存中指定了两个特殊的位置来存放字典数据。
一个区域称为“数据字典高速缓存”,也称为“行高速缓存”,因为它以行的形式存放数据,而不是以缓冲区的形式存放数据(缓冲区用于存放完整的数据块)。内存中的另一个用于存放字典数据的区域称为“库高速缓存”。所有 Oracle DB 用户进程都共享这两个高速缓存以便访问数据字典信息。
Oracle DB 使用共享 SQL 区域(以及 PGA 中保留的专用 SQL 区域)来表示它所运行的每个 SQL 语句。 Oracle DB 可识别两个用户执行相同 SQL 语句的情况,从而为这些用户重用共享 SQL 区域。
“共享 SQL 区域”包含给定 SQL 语句的语法分析树和执行计划。 Oracle DB 通过为多次运行的 SQL 语句使用一个共享 SQL 区域来节省内存。当许多用户运行同一个应用程序时,同一 SQL 语句通常会多次运行。
对新的 SQL 语句进行语法分析时, Oracle DB 会从共享池中分配内存,以便在共享 SQL区域中存储该语句。该内存的大小取决于语句的复杂性。
Oracle DB 处理 PL/SQL 程序单元(过程、函数、程序包、匿名块和数据触发器)的方式与它处理单个 SQL 语句的方式十分相似。 Oracle DB 分配一个共享区域以存放程序单元在经过语法分析和编译之后的形式。 Oracle DB 分配一个专用区域,以便存放特定于运行程序单元的会话的值,包括局部变量、全局变量和程序包变量(也称为“程序包实例化”),并且存放用于执行 SQL 的缓冲区。如果多个用户运行同一个程序单元,则所有用户都使用同一个共享区域,但维护其各自专用 SQL 区域的单独副本,以便存放特定于其自身会话的值。
PL/SQL 程序单元中包含的单个 SQL 语句的处理方式与其它 SQL 语句的处理方式类似。
无论这些 SQL 语句在 PL/SQL 程序单元中的来源如何,它们都使用共享区域来存放其语法分析表示,并且为运行语句的每个会话使用一个专用区域。
SQL 查询结果高速缓存和 PL/SQL 函数结果高速缓存是 Oracle Database 11g 中新增的功能。
它们共享相同的基础结构,出现在相同的动态性能 (V$) 视图中,并且使用所提供的同一程序包进行管理。
查询的结果和查询片段的结果可以高速缓存在“ SQL 查询结果高速缓存”的内存中。这样,数据库可以在以后执行这些查询和查询片段时使用高速缓存结果进行回答。由于从SQL 查询结果高速缓存中检索结果要比重新运行查询快得多,因此将频繁运行的查询的
结果缓存起来可以大大提高这些查询的性能。
如果计算的输入是 PL/SQL 函数发出的一个或若干个参数化查询,则有时会使用该函数来返回计算结果。在某些情况下,这些查询访问很少更改的数据(与调用函数的频率相比)。
可以在 PL/SQL 函数的源文本中包括语法,以请求将函数结果缓存在“ PL/SQL 函数结果高速缓存”中,并且在表列表中的表遇到 DML 时清除高速缓存(以确保正确无误)。

大型池

在这里插入图片描述
数据库管理员可以配置称为“大型池”的可选内存区,以便为以下对象提供大型内存分配:
• 共享服务器的会话内存和 Oracle XA 接口(在事务处理与多个数据库交互时使用)
• I/O 服务器进程
• Oracle DB 备份和还原操作
通过从大型池中为共享服务器、 Oracle XA 或并行查询缓冲区分配会话内存, Oracle DB可以主要使用共享池来缓存共享 SQL,并避免由于收缩共享 SQL 高速缓存而导致的性能开销。
此外,用于 Oracle DB 备份和还原操作、 I/O 服务器进程以及并行缓冲区的内存以数百 KB的缓冲区进行分配。与共享池相比,大型池可以更好地满足此类大型内存请求。
大型池没有 LRU 列表。它与共享池中的保留空间不同,后者与从共享池中分配的其它内存使用相同的 LRU 列表。

java池和流池

在这里插入图片描述
存储 JVM 中所有特定于会话的 Java 代码和数据的服务器内存使用 Java 池内存。 Java 池内存的使用方式有多种,具体取决于 Oracle DB 的运行模式。
Java 池指导统计信息提供了用于 Java 的库高速缓存内存的相关信息,并预测 Java 池大小的变化如何影响语法分析速率。当 statistics_level 设置为 TYPICAL 或更高值时,将在内部打开 Java 池指导。关闭该指导时,将重置这些统计信息。
流池由 Oracle Streams 独占使用。流池存储缓冲的队列消息,并且为 Oracle Streams 捕获进程和应用进程提供内存。
除非对流池进行专门配置,否则其大小从零开始。当使用 Oracle Streams 时,池大小会根据需要动态增长。

程序全局区(PGA)

在这里插入图片描述
程序全局区 (PGA) 是一个专用内存区,其中包含服务器进程的数据及控制信息。每个服务器进程都有独立的 PGA。 PGA 只能由相应的服务器进程访问,并且只有代表该服务器进程的 Oracle 代码可以读取它。开发人员的代码不能访问 PGA。
每个 PGA 都包含堆栈空间。在专用服务器环境中,连接到数据库实例的每个用户都有单独的服务器进程。对于这种类型的连接, PGA 包含一个名为用户全局区 (UGA) 的内存细分部分。 UGA 包括以下部分:
• 游标区,用于存储游标的运行时信息
• 用户会话数据存储区,用于存储有关会话的控制信息
• SQL 工作区,用于处理 SQL 语句,其中包括:

  • 排序区,用于对数据排序的函数,如 ORDER BY 和 GROUP BY
  • 散列区,用于执行表的散列联接
  • 位图创建区,用于创建数据仓库常用的位图索引
  • 位图合并区,用于解析位图索引计划的执行
    在共享服务器环境中,多个客户机用户共享服务器进程。在这种模式下, UGA 将移入SGA(共享池,如果经过配置也可是大型池), PGA 仅包含堆栈空间。

进程结构

Oracle DB 系统中的进程主要分为两组:
1、运行应用程序或 Oracle 工具代码的用户进程
对于不同的 Oracle DB 配置,用户进程结构有所不同,具体取决于操作系统和选择的 OracleDB 选件。已连接用户的代码可以配置为专用服务器或共享服务器。
• 专用服务器: 对于每个用户,运行数据库应用程序的用户进程都由执行 Oracle DB 服务器代码的专用服务器进程提供服务。
• 共享服务器: 不必为每个连接都提供一个专用服务器进程。分派程序将多个传入网络会话请求引到共享服务器进程池。共享服务器进程为所有客户机请求提供服务。
2、运行 Oracle DB 服务器代码的 Oracle DB 进程(包括服务器进程和后台进程)
2.1、服务器进程
Oracle DB 创建服务器进程以处理连接到实例的用户进程的请求。用户进程代表连接到Oracle DB 的应用程序或工具。它可以与 Oracle DB 在同一台计算机上,也可以在远程客户机上利用网络来访问 Oracle DB。用户进程首先与一个监听程序进程通信,在专用环境中该进程会创建一个服务器进程。
所创建的代表每个用户的应用程序的服务器进程可以执行以下一项或多项操作:
• 对通过应用程序发出的 SQL 语句进行语法分析并运行语句
• 从磁盘上的数据文件中将必要的数据块读取到 SGA 的共享数据库缓冲区中(如果这些数据块目前尚未在 SGA 中)
• 返回结果,使应用程序可以处理信息

2.2、后台进程
为了最大限度地提高性能并满足多个用户的需要,多进程 Oracle DB 系统使用一些称为“后台进程”的附加 Oracle DB 进程。一个 Oracle DB 实例可以有多个后台进程。
非 RAC、非 ASM 环境中的常见后台进程包括:
• 数据库写进程 (DBWn)
• 日志写进程 (LGWR)
• 检查点进程 (CKPT)
• 系统监视器进程 (SMON)
• 进程监视器进程 (PMON)
• 恢复器进程 (RECO)
• 作业队列协调程序 (CJQ0)
• 作业从属进程 (Jnnn)
• 归档进程 (ARCn)
• 队列监视器进程 (QMNn)
更高级的配置(如 RAC)中可能会有其它后台进程。有关后台进程的详细信息,请参见V$BGPROCESS 视图。
有些后台进程是在启动实例时自动创建的,而另外一些则是根据需要创建的。
其它进程结构不是特定于单个数据库的,而是可以在同一个服务器上的多个数据库间共享的。 Grid Infrastructure 进程和网络进程即属于此类。
Linux 和 UNIX 系统上的 Oracle Grid Infrastructure 进程包括:
• ohasd: Oracle 高可用性服务守护程序,负责启动 Oracle Clusterware 进程
• ocssd:集群同步服务守护程序
• diskmon:磁盘监视守护程序,负责监视 HP Oracle Exadata Storage Server 的输入和输出
• cssdagent:启动、停止和检查 CSS 守护程序 ocssd 的状态
• oraagent:扩展集群件以支持 Oracle 特有的要求和复杂资源
• orarootagent:一种专用的 Oracle 代理进程,可帮助管理 root 用户所拥有的资源(如网络在这里插入图片描述

数据库写进程(DBWn)

在这里插入图片描述
数据库写进程 (DBWn) 可以将缓冲区的内容写入数据文件。 DBWn 进程负责将数据库缓冲区高速缓存中经过修改的缓冲区(灰数据缓冲区)写入磁盘。虽然对于大多数系统来说,一个数据库写进程 (DBW0) 已经足够;但是,如果系统需要频繁修改数据,也可以配置附加进程( DBW1 到 DBW9 以及 DBWa 到 DBWz)来改进写性能。这些附加 DBWn 进程在单处理器系统中没有用。
当数据库缓冲区高速缓存中的某个缓冲区被修改时,系统会将其标记为灰数据缓冲区,并将其添加到按 SCN 顺序排列的检查点队列的头中。因此,该顺序与这些更改的缓冲区的重做条目写入重做日志的顺序一致。当缓冲区高速缓存中的可用缓冲区的数量低于某个内部阈值(达到服务器进程认为很难获取可用缓冲区的程度)时, DBWn 会将不经常使用的缓冲区写入数据文件,写入顺序是从 LRU 列表的尾部开始,从而使进程可以在需要缓冲区时替换它们。 DBWn 也会从检查点队列的尾部写入,以保护检查点向前推进。
SGA 中有一个内存结构保存了重做流中位置的重做字节地址 (RBA),当实例发生故障时,将从该位置开始恢复。此结构充当指向重做的指针,并且由 CKPT 进程按照每三秒一次的频率写入控制文件。由于 DBWn 按照 SCN 顺序写入灰数据缓冲区,而重做按照 SCN顺序执行,因此每当 DBWn 从 LRUW 列表写灰数据缓冲区时,还会将 SGA 内存结构中保持的指针前移,以便实例恢复(如果需要)从近似正确的位置开始读取重做,并避免不必要的 I/O。这称为“增量检查点”。
注: 还有其它一些 DBWn 可能执行写操作的情况(例如,当表空间被设置为只读或被置于脱机状态时)。在这些情况下,不会出现增量检查点,因为仅属于相应数据文件的灰数据缓冲区在写入数据库时的顺序与 SCN 顺序无关。
LRU 算法将更频繁访问的块保存在缓冲区高速缓存中,以尽可能地减少磁盘读取。可对表使用 CACHE 选项,以帮助延长块在内存中的保留时间。
DB_WRITER_PROCESSES 初始化参数指定了 DBWn 进程的数量。 DBWn 进程的最大数量为 36。如果用户在启动过程中未指定该进程数, Oracle DB 将根据 CPU 和处理器组的数量来决定如何设置 DB_WRITER_PROCESSES。
在以下情况下, DBWn 进程将灰数据缓冲区写入磁盘:
• 当服务器进程在扫描阈值数目的缓冲区之后找不到干净的可重用缓冲区时,会通知DBWn 执行写操作。 DBWn 在执行其它处理的同时,将灰数据缓冲区异步写入磁盘。
• DBWn 写缓冲区以推进检查点。检查点是重做线程(日志)中用于执行实例恢复的起始位置。该日志位置由缓冲区高速缓存中最旧的灰数据缓冲区确定。在所有情况下, DBWn 均执行成批(多块)写操作以提高效率。多块写操作中写入的块数因操作系统而异。

日志写进程(LGWR)

在这里插入图片描述
日志写进程 (LGWR) 负责管理重做日志缓冲区,方法是将重做日志缓冲区条目写入磁盘上的重做日志文件。 LGWR 会写入自上次写入以来复制到缓冲区中的所有重做条目。
重做日志缓冲区是循环缓冲区。当 LGWR 将重做日志缓冲区中的重做条目写入重做日志文件后,服务器进程可以将新条目复制到重做日志缓冲区中的那些已写入磁盘的条目之上。LGWR 的写入速度通常足够快,可以确保缓冲区中始终有空间可供新条目使用,即使对重做日志的访问量很大时也是如此。 LGWR 将缓冲区的一个连续部分写入磁盘。
LGWR 在以下情况下执行写操作:
• 用户进程提交事务处理时
• 重做日志缓冲区的三分之一已满时
• 在 DBWn 进程将经过修改的缓冲区写入磁盘(如果需要)之前
• 每隔 3 秒
必须在与缓冲区更改相关联的所有重做记录写入磁盘后, DBWn 才可以向磁盘写入经过修改的缓冲区(先行写协议)。如果 DBWn 发现一些重做记录尚未写入,则会通知 LGWR
将这些重做记录写入磁盘,并等待 LGWR 完成重做日志缓冲区的写入操作,然后再写数据缓冲区。 LGWR 将向当前的日志组进行写入。如果该组中的某个文件已损坏或不可用,LGWR 将继续写入该组中的其它文件,并在 LGWR 跟踪文件和系统预警日志中记录一个错误。如果某个组中的所有文件均已损坏,或者该组由于尚未归档而不可用,则 LGWR无法继续工作。
当用户发出 COMMIT 语句时, LGWR 会将一条提交记录放在重做日志缓冲区中,并立即将该记录随同事务处理的重做日志一起写入磁盘中。对数据块进行的相应更改将延迟,直到能够更为高效地写入这些更改时才会执行。这称为“快速提交机制”。包含事务处理提交记录的重做条目的原子写是单个事件,该事件可以确定事务处理是否已提交。
Oracle DB 为提交的事务处理返回一个成功代码,尽管数据缓冲区尚未写入磁盘中。
如果需要更多缓冲区空间, LGWR 有时会在提交事务处理之前写入重做日志条目。仅当稍后提交了该事务处理之后,这些条目才会成为永久条目。当用户提交事务处理时,该事务处理将被分配一个系统更改号 (SCN), Oracle DB 将该号码与事务处理的重做条目一起记录在重做日志中。 SCN 记录在重做日志中,以便可以在 Real Application Clusters 和分布
式数据库之间同步恢复操作。
当活动比较频繁时, LGWR 可以通过使用组提交来写入重做日志文件。例如,假设用户提交一个事务处理。 LGWR 必须将该事务处理的重做条目写入磁盘。发生该情况时,其他用户将发出 COMMIT 语句。但是, LGWR 在完成其上一个写操作之前,无法写入重做日志文件以提交这些事务处理。在第一个事务处理的条目写入重做日志文件之后,可以在一次操作中将正在等待(尚未提交)的事务处理的整个重做条目列表写入磁盘,这比分别处理各个事务处理条目所需的 I/O 要少。因此, Oracle DB 可以将磁盘 I/O 降至最少,并最大限度地提高 LGWR 的性能。如果提交请求的速率一直较高,则从重做日志缓冲区进行的每个写操作(由 LGWR 执行)都可能包含多个提交记录。

检查点进程(CKPT)

在这里插入图片描述
“检查点”是一种数据结构,用于定义数据库的重做线程中的系统更改号 (SCN)。检查点被记录在控制文件和每个数据文件头中。它们是恢复操作的关键元素。
出现检查点时, Oracle DB 必须更新所有数据文件的头,以记录该检查点的详细信息。这是由 CKPT 进程完成的。 CKPT 进程不会将块写入磁盘;该工作都是由 DBWn 执行。文件头中记录的 SCN 可保证将该 SCN 之前对数据库块进行的所有更改写入到磁盘中。
Oracle Enterprise Manager 中的 SYSTEM_STATISTICS 监视器将显示统计信息 DBWR 检查点,由其指示已完成的检查点请求的数目。

系统监视器进程(SMON)

在这里插入图片描述
系统监视器进程 (SMON) 在实例启动时执行恢复(如果需要)。 SMON 还负责清除不再使用的临时段。如果在实例恢复过程中由于文件读取或脱机错误跳过任何已终止的事务处理,则 SMON 将在表空间或文件重新联机时恢复这些事务处理。
SMON 定期检查以查看是否需要该进程。其它进程在检测到需要 SMON 时也可以调用它。

进程监视器进程

在这里插入图片描述
进程监视器进程 (PMON) 在用户进程失败时执行进程恢复。 PMON 负责清除数据库缓冲区高速缓存和释放该用户进程占用的资源。例如, PMON 会重置活动事务处理表的状态,释放锁,并从活动进程列表中删除该进程 ID。
PMON 定期检查分派程序和服务器进程的状态,并重新启动任何已停止运行(除了 OracleDB 故意终止)的分派程序和服务器进程。 PMON 还会在网络监听程序中注册有关实例和分派程序进程的信息。
与 SMON 一样, PMON 定期检查以查看是否需要运行;如果其它进程检测到需要该进程,也可以调用它。

恢复器进程

在这里插入图片描述
恢复器进程 (RECO) 是用于分布式数据库配置的后台进程,自动解决涉及分布式事务处理的故障。实例的 RECO 进程会自动连接到其它那些与有问题的分布式事务处理有关的数据库。当 RECO 进程在涉及到的数据库服务器之间重新建立连接时,它会自动解决所有有问题的事务处理,从每个数据库的暂挂事务处理表中删除所有对应于已解决的有问题事务处理的行。
如果 RECO 进程无法与远程服务器连接, RECO 会在某个计时间隔之后自动尝试重新连接。但是, RECO 在重新尝试连接之前,会等待一段时间,此时间会不断增加(呈幂指数增长)。

归档进程(ARCn)

在这里插入图片描述
发生日志切换之后,归档进程 (ARCn) 会将重做日志文件复制到指定的存储设备。仅当数据库处于 ARCHIVELOG 模式且已启用自动归档时,才会存在 ARCn 进程。
如果您预计归档的工作负荷很重(例如在成批加载数据期间),则可以使用LOG_ARCHIVE_MAX_PROCESSES 初始化参数增加最大归档进程数。 ALTER SYSTEM 语句可以动态更改该参数的值,以增加或减少 ARCn 进程数。

存储结构

在这里插入图片描述

构成 Oracle DB 的文件可划分为以下类别:
• 控制文件: 包含与数据库本身相关的数据,即物理数据库结构信息。这些文件对数据库至关重要。没有这些文件,就无法打开数据文件以访问数据库中的数据。
• 数据文件: 包含数据库的用户或应用程序数据,以及元数据和数据字典
• 联机重做日志文件: 用于进行数据库的实例恢复。如果数据库服务器发生崩溃,但未丢失任何数据文件,那么实例便可使用这些文件中的信息恢复数据库。
下列附加文件对成功运行数据库非常重要:
• 参数文件: 用于定义实例启动时的配置
• 口令文件: 允许 sysdba、 sysoper 和 sysasm 远程连接到实例并执行管理任务
• 备份文件: 用于进行数据库恢复。如果原始文件在发生介质故障或用户错误时被损坏或删除,通常要还原备份文件。
• 归档重做日志文件: 包含实例发生的数据更改(重做)的实时历史记录。使用这些文件和数据库备份,可以恢复丢失的数据文件。也就是说,归档日志能够恢复还原的数据文件。
• 跟踪文件: 每个服务器和后台进程都可以写入关联的跟踪文件。当进程检测到内部错误时,进程会将有关该错误的信息转储到相应的跟踪文件中。写入跟踪文件的一些信息是为数据库管理员提供的,而其它信息是为 Oracle Support Services 提供的。
• 预警日志文件: 这些文件包含特殊的跟踪条目。数据库的预警日志是按时间顺序列出的消息日志和错误日志。 Oracle 建议您定期查看预警日志。

逻辑和物理数据库结构

在这里插入图片描述

数据库、表空间和数据文件

本幻灯片对数据库、表空间和数据文件之间的关系进行了说明。每个数据库都在逻辑上分为两个或多个表空间。在每个表空间均显式创建一个或多个数据文件,以在物理上存储表空间中所有逻辑结构的数据。对于 TEMPORARY 表空间,不创建数据文件,而是创建临时
文件。表空间的数据文件可以采用任何受支持的存储技术进行物理存储。

表空间

数据库分为多个逻辑存储单元,这些单元称为“表空间”,用于对相关逻辑结构或数据文件进行分组。例如,表空间一般会将一个应用程序的所有段分成一组,以简化一些管理操作。在这里插入图片描述
数据库被划分为多个“表空间”,表空间是可用于将相关逻辑结构组合在一起的逻辑存储单元。每个数据库都在逻辑上分为两个或多个表空间: SYSTEM 和 SYSAUX 表空间。在每个表空间均显式创建一个或多个数据文件,以在物理上存储表空间中所有逻辑结构的数据。
一个大小为 160 KB 的段跨越两个数据文件,由两个区组成。第一个区位于第一个数据文件中,大小为 64 KB;第二个区位于第二个数据文件中,大小为 96 KB。两个区都由若干相邻的 8Kb Oracle 块组成。
注: 可以创建大文件表空间,这种表空间只有一个通常非常大的文件。该文件的大小可达到行 ID 体系结构允许的最大大小。此最大大小是表空间的块大小乘以 236,如果块大小为 32 KB,则最大大小为 128 TB。传统的小文件表空间(默认值)可以包含多个数据文件,但这些文件都不大。

数据块

Oracle DB 的数据存储在“数据块”中,数据块是粒度最低的一级。一个数据块对应于磁盘中特定字节数的物理空间。每个表空间的数据块大小是在表空间创建时指定的。数据库以 Oracle 数据块为单位使用和分配空闲数据库空间。

在这里插入图片描述

逻辑数据库空间的下一级是“区”。区是特定数量的相邻 Oracle 数据块(通过一次分配获得),用于存储特定类型的信息。区中的 Oracle 数据块在逻辑上是相邻的,但在物理上可以分布在磁盘上的不同位置( RAID 条带化和文件系统实施会导致此现象)。

逻辑数据库存储中区的上一级称为“段”。一个段是为某个逻辑结构分配的一组区。例如:
• 数据段: 每个非集群的、不按索引组织的表都有一个数据段,但外部表、全局临时表和分区表除外,这些表中的每个表都有一个或多个段。表中的所有数据都存储在相应数据段的区中。对于分区表,每个分区都有一个数据段。每个集群也都有一个数据段。集群中每个表的数据都存储在集群的数据段中。
• 索引段: 每个索引都有一个索引段,存储其所有数据。对于分区索引,每个分区都有一个索引段。
• 还原段: 系统会为每个数据库实例创建一个 UNDO 表空间。该表空间包含大量用于临时存储还原信息的还原段。还原段中的信息用于生成读一致性数据库信息,以便在数据库恢复过程中回退用户未提交的事务处理。
• 临时段: 临时段是 SQL 语句需要临时工作区来完成执行时由 Oracle DB 创建的。语句完成执行后,临时段的区将返回到实例以备将来使用。您可以为每个用户指定一个默认临时表空间,或指定一个在数据库范围内使用的默认临时表空间。
注: 另外还有一些上面未列出的其它类型的段。此外,还有一些方案对象,如视图、程序包和触发器等,虽然它们是数据库对象,但不被视为段。段拥有单独的磁盘空间分配。其它对象则以行的形式存储在系统元数据段中。
Oracle DB 服务器对空间进行动态分配。如果段中的现有区已满,则会再增加一些区。因为区是根据需要来分配的,因此段中的区在磁盘上可能是相邻的,也可能是不相邻的,它们可以来自属于同一个表空间的不同数据文件。

自动存储管理

在这里插入图片描述
自动存储管理 (ASM) 为 Oracle DB 文件提供文件系统与卷管理器纵向集成。 ASM 可管理单个对称多处理 (SMP) 计算机,或管理集群的多个节点来支持 Oracle Real Application Clusters (RAC)。
Oracle ASM 集群文件系统 (ACFS) 是一种多平台、可伸缩的文件系统和存储管理技术,该技术扩展了 ASM 的功能,可支持 Oracle DB 外部的应用程序文件,如可执行文件、报表、BFILE、视频、音频、文本、图像以及其它一般用途的应用程序文件数据。
ASM 在所有可用资源中分布输入/输出 (I/O) 负载,既免除了手动优化 I/O 又优化了性能。ASM 帮助 DBA 管理动态数据库环境,让 DBA 在不关闭数据库的情况下,通过增加数据库的大小来调整存储分配。
ASM 可以维护数据的冗余副本来提供容错能力,也可以构建在供应商提供的存储机制之上。数据管理是通过为各类数据选择所需的可靠性和性能指标来实现的,而不是逐个文件地进行人工交互。
通过使手动完成的存储工作自动化, ASM 功能节省了 DBA 的时间,从而提高了管理员的能力,使其可以管理更多和更大的数据库,而且效率也更高。
在这里插入图片描述
ASM 不会妨碍任何现有的数据库功能。现有数据库能够像平常一样工作。新文件可以被创建为 ASM 文件,而现有文件既可以按原有方式进行管理,也可以移植至 ASM。
上图说明了 Oracle DB 数据文件与 ASM 存储组件之间的关系。鸦脚标记代表一对多关系。Oracle DB 数据文件与存储操作系统的文件系统中的文件或 ASM 文件之间是一对一关系。
Oracle ASM 磁盘组是作为一个逻辑单元进行管理的一个或多个 Oracle ASM 磁盘的集合。磁盘组中的数据结构是自包含的,使用部分空间来满足元数据需求。 Oracle ASM 磁盘是为 Oracle ASM 磁盘组预配的存储设备,可以是物理磁盘,也可以是分区、存储阵列中的
逻辑单元号 (LUN)、逻辑卷 (LV) 或连接到网络的文件。每个 ASM 磁盘被分成许多 ASM分配单元 (AU),该单元是 ASM 可以分配的最小相邻磁盘空间量。在创建 ASM 磁盘组时,可以将 ASM 分配单元的大小设置为 1、 2、 4、 8、 16、 32 或 64 MB,具体取决于磁盘组的兼容级别。一个或多个 ASM 分配单元即形成一个 ASM 区。 Oracle ASM 区是用于存放Oracle ASM 文件内容的裸存储。 Oracle ASM 文件由一个或多个文件区组成。为了支持非常大的 ASM 文件,可以使用可变大小区,区大小可等于 AU 大小的 1 倍、 4 倍和 16 倍。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐