Oracle Database 19c 技术架构




  • Oracle官方文档中给出的Oracle Database 19c技术架构图,可以看出制作者的用心和精心。不翻译一下真是对不起作者!

    同时本文可以作为学习Oracle体系结构很好的教材!值得大家收藏!

    1. 数据库服务器(Database Server)

    一个Oracle数据库至少由一个数据库实例和一个数据库组成。 数据库实例部分处理内存和进程,数据库部分则由称为数据文件的物理文件组成,并且可以是非容器数据库或多租户容器数据库。 Oracle数据库在其运行期间还会使用多个数据库系统文件。

    单实例数据库体系结构由一个数据库实例和一个数据库组成。 数据库和数据库实例之间存在一对一的关系。 可以在同一台服务器上安装多个单实例数据库。 每个数据库都有单独的数据库实例。 此配置对于在同一台计算机上运行不同版本的Oracle数据库很有用。

    Oracle Real Application Clusters (Oracle RAC) 数据库的体系结构是由在分开的多台服务器计算机上运行的多个实例组成。 它们都共享同一个数据库。 服务器群集在一端表现为单个服务器,而在另一端则为最终用户和应用程序。 此配置旨在实现高可用性,可伸缩性和高端的性能。

    监听器是一个数据库服务器进程。 它接收客户端请求,建立与数据库实例的连接,然后将客户端连接移交给服务器进程。 监听器可以在数据库服务器上本地运行,也可以远程运行。 典型的Oracle RAC环境是远程运行的。

     

    2. 数据库实例(Database Instance)

    数据库实例包含一组Oracle数据库后台进程和内存结构。 主要的内存结构是系统全局区 (SGA) 和程序全局区 (PGA)。 后台进程对数据库中存储的数据(数据文件)进行操作,并使用内存结构完成其工作。 数据库实例仅存在于内存中。

    Oracle数据库还创建服务器进程,以代表客户端程序处理与数据库的连接,并执行客户端程序的工作。 例如,解析和运行SQL语句,以及检索结果并将结果返回给客户端程序。 这些类型的服务器进程也称为前台进程。

    注意:更多详细信息,请看如下内容:Oracle Database Instance.

     

    3.系统全局区(System Global Area)


    系统全局区域 (SGA) 是包含一个Oracle数据库实例的数据和控制信息的存储区域。 数据库所有的服务器进程和后台进程共享方式使用SGA。启动数据库实例时,将会显示SGA分配的内存量。 SGA包含以下数据结构:

    •共享池 (Shared pool):在多个用户之间共享各种的缓存结构; 例如,共享池存储已解析的SQL,PL/SQL代码,系统参数和数据字典信息。 共享池几乎涉及数据库中发生的每个操作。 例如,如果用户执行SQL语句,则Oracle数据库将访问共享池。

    •闪回缓冲区 (Flashback buffer):是SGA中的可选组件。启用闪回数据库后,将启动称为恢复写程序 (RVWR) 的后台进程。 RVWR定期将修改后的块从缓冲区高速缓存复制到闪回缓冲区,然后将闪回数据库数据从闪回缓冲区写入闪回数据库日志,以循环方式重用。

    •数据库高速缓冲区 (Database buffer cache):是存储从数据文件读取的数据块副本的内存区域。缓冲区是主内存地址,缓冲区管理器在其中临时缓存当前或最近使用的数据块。并发连接到数据库实例的所有用户共享对数据库高速缓冲区的访问。

    •数据库智能闪存缓存 (Database Smart Flash):是Solaris或Oracle Linux上运行的数据库的数据库高速缓冲区的可选内存扩展。它为数据库中的数据块提供了2级缓存。针对读取密集型的在线事务处理 (OLTP) 工作负载,以及数据仓库 (DW) 中的即席查询 (Ad Hoc) 和批量数据修改工作,它可以提升这两种工作的响应时间和总体吞吐量。数据库智能闪存缓存驻留在一个或多个闪存设备上,这些设备是使用闪存的固态存储设备。数据库智能闪存缓存通常比其他主内存更经济,并且比磁盘驱动器快一个数量级。

    •重做日志缓冲区 (Redo log buffer):是SGA中的循环缓冲区,用于保存有关对数据库所做的更改的信息。这些信息存储在重做条目中。重做条目包含重建(或重做)通过数据操作语言 (DML),数据定义语言 (DDL) 或内部操作对数据库所做的更改所必需的信息。如有必要,可将重做条目用于数据库恢复。

    •大池 (Large pool):是一个可选的内存区域,用于大于共享池的内存分配。大池可以为如下内容提供更大的内存分配:共享服务器的用户全局区域 (UGA),Oracle XA接口(用于事务与多个数据库进行交互的地方),并行执行语句的消息缓冲区,用于Recovery Manager (RMAN) I/O 从属进程的缓冲区和延迟插入。

    •内存中列式存储(In-Memory Area):是一个可选组件,使对象(表,分区和其他类型)可以以称为列格式的新格式存储在内存中。与传统的磁盘格式相比,此格式使扫描,联接和聚合的执行速度快得多,从而为OLTP和DW环境提供了快速的报告和DML性能。相对于在返回包含多列的少量行上运行的OLTP,此功能对在运行返回包含少量列的多行的分析应用程序特别有用。

    •内存优化池(Memoptimize Pool):是一个可选组件,可为基于键的查询提供高性能和可伸缩性。 Memoptimize池包含两部分,即memoptimize缓冲区和哈希索引。快速查询 (Fast Lookup) 使用memoptimize池中的哈希索引结构提供对给定表中块的快速访问 (启用MEMOPTIMIZE FOR READ选项) 以永久固定在缓冲区高速缓存中,以避免磁盘 I/O。 Memoptimize池中的缓冲区与数据库缓冲区完全分开。哈希索引是在配置Memoptimized Rowstore 时创建的,并由Oracle数据库自动维护。

    •共享I / O池(Shared I/O SecureFiles):用于SecureFile大对象 (LOB) 上的大型 I/O 操作。 LOB是一组数据类型,旨在保存大量数据。 SecureFile是一个LOB存储参数,允许重复数据删除,加密和压缩。

    •流池(Streams pool):由Oracle Streams,Data Pump和GoldenGate集成的捕获和应用流程使用。 Streams池存储缓冲的队列消息,并且为Oracle Streams捕获进程和应用进程提供内存。除非您进行特定配置,否则Streams池的大小从零开始。使用Oracle Streams时,池大小会根据需要动态增加。

    •Java池(Java pool):用于Java虚拟机 (JVM) 中所有特定于会话的Java代码和数据。 Java池内存的使用方式不同,具体取决于Oracle数据库的运行模式。

    •固定的SGA(Fixed SGA):是SGA的一个组成部分,一个内部整理区域,其大小因平台而异,并随发行版本的不同而变化。其中包含有关数据库和数据库实例的状态的一般信息以及进程之间进行通信的信息(固定SGA包含一组指向SGA其他组件的变量以及包含各种参数值的变量)。固定SGA的大小是我们无法控制的,通常很小。可以将此区域视为SGA的引导区,Oracle在内部使用此东西来查找SGA的其他部分。SGA的固定区域包含数千个原子变量,小型数据结构(例如锁存器和指向SGA其他区域的指针)。这些变量以及它们的数据类型,大小和内存地址都列在固定表 X$KSMFSV 中。

    注意:更多详细信息,请看如下内容:Overview of the System Global Area (SGA).

     

    4.程序全局区(Program Global Area)

    程序全局区域(PGA)是一个非共享的内存区域,其中包含专门由服务器和后台进程使用的数据和控制信息。 Oracle数据库创建服务器进程,以代表客户端程序处理与数据库的连接。 在专用服务器环境中,为每个服务器和启动的后台进程创建一个PGA。 每个PGA都由堆栈空间,哈希区域,位图合并区域和用户全局区域(UGA)组成。 当终止与之关联的服务器或后台进程时,将释放PGA。
    •在共享服务器环境中,多个客户端用户共享服务器进程。 UGA被移入大型池,而PGA仅具有堆栈空间,哈希区域和位图合并区域。
    •在专用服务器会话中,PGA由以下组件组成:
      ‣SQL工作区 (SQL work areas):排序区供排序数据的函数使用,例如ORDER BY和GROUP BY。
      ‣会话内存 (Session memory):此用户会话数据存储区分配给会话变量,例如登录信息和数据库会话所需的其他信息。 OLAP池管理OLAP数据页,这些数据页等效于数据块。
      ‣私有SQL区域 (Private SQL area):此区域保存有关已解析的SQL语句的信息以及其他特定于会话的信息以供处理。当服务器进程执行SQL或PL / SQL代码时,该进程使用私有SQL区域存储绑定变量值,查询执行状态信息和查询执行工作区。相同或不同会话中的多个私有SQL区域可以指向SGA中的单个执行计划。持久区域 (persistent area) 包含绑定变量值。运行时区域 (runtime area) 包含查询执行状态信息。游标是专用SQL区域中特定区域的名称或句柄。您可以将游标视为客户端上的指针,以及服务器端上的状态。因为游标与私有SQL区域紧密相关,所以有时可以互换使用这些术语。
      ‣堆栈空间 (Stack space):堆栈空间是分配用于保存会话变量和数组的内存。
      ‣散列区域 (hash area):此区域用于执行表的散列连接。
      ‣位图合并区域 (bitmap merge area):此区域用于合并从多个位图索引的扫描中检索到的数据。
    注意:更多详细信息,请看如下内容:Overview of the Program Global Area (PGA).

     

    5. 后台进程(Background processes)  

    后台进程是数据库实例的⼀部分,它执⾏操作数据库和使多个⽤户的性能⼤化 所需的维护任务。每个后台进程执⾏⼀个独特的任务,但与其他进程⼀起⼯作。启动 数据库实例时,Oracle数据库会⾃动创建后台进程。存在的后台进程取决于数据库中 正在使⽤的功能。启动数据库实例时,必要的后台进程将⾃动启动。您可以根据需要 稍后启动可选的后台进程。

    所有典型的数据库配置中都存在必要的的后台进程。默认情况下,这些进程使⽤ 初始化参数⽂件中的低配置,开始在读/写模式的数据库实例中运⾏。只读数据库实 例将禁⽤其中⼀些进程。必要的后台进程包括进程监控进程 (PMON),进程管理器进 程 (PMAN),监听器注册进程 (LREG),系统监控进程 (SMON),数据库写进程 (DBWn),检查点进程 (CKPT),可管理性监控进程 (MMON),可管理性监控器精简进 程 (MMNL),恢复程序进程 (RECO) 和⽇志写进程 (LGWR)。

    ⼤多数可选的后台进程特定于任务或功能。⼀些常⻅的可选过程包括归档进程 (ARCn),作业队列协调进程 (CJQ0),恢复写⼊进程 (RVWR),闪回数据存档进程 (FBDA) 和空间管理协调进程 (SMCO)。

    从属进程是代表其他进程执⾏⼯作的后台进程。例如,分派进程 (Dnnn) 和共享 服务器进程 (Snnn)。

    注意:获得完整的进程列表,请看如下内容:Background Processes.

    6. 共享池(shared pool)

    共享池是系统全局区 (SGA) 的组成部分,负责缓存各种类型的程序数据。例如, 共享池存储已解析的SQL,PL/SQL代码,系统参数和数据字典信息。共享池⼏乎涉及 数据库中发⽣的每个操作。例如,如果⽤户执⾏SQL语句,则Oracle数据库将访问共 享池。
    共享池分为⼏个⼦组件:

    •库⾼速缓存 (Library cache):是⼀种共享池内存结构,⽤于存储可执⾏的 SQL和PL/SQL代码。该缓存包含共享的SQL和PL/SQL区域以及控制结构,例如锁 和库缓存句柄。当执⾏SQL语句时,数据库尝试重⽤以前执⾏的代码。如果库⾼速 缓存中存在SQL语句的已解析表示形式并且可以共享,则数据库将重⽤代码。此操 作称为软解析或库⾼速缓存命中。否则,数据库必须构建应⽤程序代码的新的可执 ⾏版本,这称为硬解析或库⾼速缓存未命中。

    •保留池 (Reserved pool):是共享池中的⼀个内存区域,Oracle数据库可使⽤ 该内存区域来分配连续的⼤块内存。数据库从共享池中按照Chunk⽅式分配内存。 Chunk允许将⼤型对象(超过5 KB)加载到缓存中,⽽⽆需单个连续区域。这样, 数据库减少了由于碎⽚⽽耗尽连续内存的可能性。

    •数据字典⾼速缓存 (Data dictionary cache):存储有关数据库对象的信息 (即字典数据)。此缓存也称为⾏缓存,因为它将数据保存为⾏⽽不是缓冲区。

    •服务器结果缓存 (Server result cache):是共享池中的⼀个内存池,并保存结 果集。服务器结果缓存包含SQL查询结果缓存和PL/SQL函数结果缓存,它们共享相 同的基础结构。 SQL查询结果缓存存储查询和查询⽚段的结果。⼤多数应⽤程序都 受益于这种性能改进。 PL/SQL函数结果缓存存储函数结果集。结果缓存的良好候 选者是经常调⽤的函数,这些函数依赖于相对静态的数据。

    •其他组件 (Other components):包括队列,锁存器,信息⽣命周期管理 (ILM) 位图表,活动会话历史记录 (ASH) 缓冲区和其他次要内存结构。排队是共享 的内存结构(锁),⽤于序列化对数据库资源的访问。它们可以与会话或事务相关 联。例如:控制⽂件事务,数据⽂件,实例恢复,介质恢复,事务恢复,作业队列 等。锁存器⽤作低级序列化控制机制,⽤于保护SGA中的共享数据结构免于同时访 问。例如:⾏⾼速缓存对象,库⾼速缓存pin和⽇志⽂件并⾏写⼊。

    注意:更多详细信息,请看如下内容:Shared Pool.

     

    7. ⼤池(Large Pool)

    ⼤池是数据库管理员可以配置的可选内存区域,可以为以下各项提供⼤内存分配:

    •⽤户全局区域 (UGA):共享服务器和Oracle XA接⼝的会话内存(⽤于事务与 多个数据库交互)

    •I/O 缓冲区 (I/O Buffer Area):I/O服务器进程,并⾏查询操作中使⽤的消息缓 冲区,Recovery Manager (RMAN) I/O从属进程的缓冲区,以及存储⾼级排队内存 表。

    •延迟插⼊池 (Deferred Inserts Pool):快速提取功能可将数据库中定义为 MEMOPTIMIZE FOR WRITE的表进⾏⾼频单⾏数据插⼊。快速摄取的插⼊物也称 为延迟插⼊物。它们初在⼤缓冲池中缓冲,然后在每个对象每个会话每次写⼊ 1MB或60秒后由空间管理协调器 (SMCO) 和Wxxx从属后台进程异步写⼊磁盘。在 SMCO后台进程进⾏扫描之前,任何会话(包括写⼊的会话)都⽆法读取该缓冲池 中缓冲的任⼀数据,即使已提交的会话。该池在⼤型池中被初始化是在第⼀⾏数据 插⼊memoptimized 表时进⾏。当有⾜够的空间时,将从⼤型池中分配2G。如果⼤ 型池中没有⾜够的空间,则会在内部发现并⾃动清除ORA-4031,然后使⽤⼀半的 请求内存⼤⼩重试分配。如果⼤型池中仍然没有⾜够的空间,则使⽤512M和256M 重试分配,然后禁⽤该功能,直到重新启动实例。初始化池后,⼤⼩将保持不变。 它不能增⻓或收缩。

    •可⽤内存

    ⼤型池与共享池中的保留空间不同,共享池中的保留空间与从共享池分配的其他 内存使⽤相同的近少使⽤ (LRU) 列表。 ⼤池没有LRU列表。 内存已分配,在使⽤ 完之前⽆法释放。

    来⾃⽤户的请求是单个API调⽤,属于⽤户的SQL语句。 在专⽤服务器环境中, ⼀个服务器进程处理单个客户端进程的请求。 每个服务器进程都使⽤系统资源,包括 CPU周期和内存。 在共享服务器环境中,将发⽣以下操作:

    1. 客户端应⽤程序向数据库实例发送请求,并且分派进程接收该请求。

    2. 分派进程将请求放在⼤池中的请求队列上。

    3. 下⼀个可⽤的共享服务器进程将处理该请求。共享服务器进程检查公共请求 队列中是否有新请求,并以先进先出的⽅式接收新请求。⼀个共享服务器进 程在队列中接收⼀个请求。

    4. 共享服务器进程对数据库进⾏所有必要的调⽤以完成请求。⾸先,共享服务 器进程访问共享池中的库缓存以验证请求的项⽬;例如,它检查表是否存 在,⽤户是否具有正确的特权等等。接下来,共享服务器进程访问缓冲区⾼ 速缓存以检索数据。如果数据不存在,则共享服务器进程将访问磁盘。不同 的共享服务器进程可以处理每个数据库调⽤。因此,解析查询,获取第⼀ ⾏,获取下⼀⾏以及关闭结果集的请求可能分别由不同的共享服务器进程处 理。由于不同的共享服务器进程可能会处理每个数据库调⽤,因此⽤户全局 区域 (UGA) 必须是共享内存区域,因为UGA包含有关每个客户端会话的信 息。反过来说,UGA包含有关每个客户端会话的信息,并且必须对所有共享 服务器进程可⽤,因为任何共享服务器进程都可以处理任何会话的数据库调 ⽤。

    5. 请求完成后,共享服务器进程将响应放置在⼤型池中的呼叫分派进程的响应 队列上。每个分派进程都有⾃⼰的响应队列。

    6. 响应队列将响应发送到分派进程。

    7. 分派进程将完成的请求返回到适当的客户端应⽤程序。

    注意:更多详细信息,请看如下内容:Large Pool.

     

    8. 数据库⾼速缓冲区(Database Buffer Cache)

    数据库缓冲区⾼速缓存,也称为缓冲区⾼速缓存,是系统全局区域 (SGA) 中的存 储区域,⽤于存储从数据⽂件读取的数据块的副本。缓冲区是数据库块⼤⼩的内存 块。每个缓冲区都有⼀个称为数据库缓冲区地址 (DBA) 的地址。同时连接到数据库实 例的所有⽤户共享对缓冲区⾼速缓存的访问。缓冲区⾼速缓存的⽬标是优化物理I/O, 并将经常访问的块保留在缓冲区⾼速缓存中,并将不经常访问的块写⼊磁盘。

    Oracle数据库⽤户进程第⼀次需要特定数据时,它将在数据库缓冲区⾼速缓存中 搜索数据。如果进程发现缓存中已存在的数据(缓存命中),则可以直接从内存中读 取数据。如果该进程在缓存中找不到数据(缓存未命中),则它必须在访问数据之前 将数据块从磁盘上的数据⽂件复制到缓存中的缓冲区中。通过缓存命中访问数据⽐通 过缓存未命中访问数据更快。

    ⾼速缓存中的缓冲区由复杂算法管理,该算法使⽤近少使⽤ (LRU) 列表和 Touch Count算法的组合。LRU有助于确保近使⽤的块倾向于保留在内存中,以 ⼤程度地减少磁盘访问。

    数据库⾼速缓冲区包括以下内容:

    •默认池 (Default pool):是通常缓存块的位置。默认块⼤⼩为8 KB。除⾮您⼿ 动配置单独的池,否则默认池是唯⼀的缓冲池。其他池的可选配置对默认池⽆效。

    •保留池 (Keep pool):适⽤于经常访问但由于空间不⾜⽽在默认池中过期的 块。保留缓冲池的⽬的是在内存中保留指定的对象,从⽽避免I/O操作。

    •回收池 (Recycle pool):⽤于不经常使⽤的块。回收池可防⽌指定的对象占⽤ 缓存中不必要的空间。

    •⾮默认缓冲池 (Non-default buffer pools):适⽤于使⽤2 KB,4 KB,16 KB 和32 KB⾮标准块⼤⼩的表空间。每个⾮默认块⼤⼩都有其⾃⼰的池。 Oracle数据 库以与默认池相同的⽅式管理这些池中的块。

    •数据库智能闪存缓存 (Flash cache):使您可以使⽤闪存设备来增加缓冲区缓 存的有效⼤⼩,⽽⽆需添加更多主内存。闪存缓存可以通过将数据库缓存的需频繁 访问的数据存储到闪存中⽽不是从磁盘读取数据来提⾼数据库性能。当数据库请求 数据时,系统⾸先在数据库缓冲区⾼速缓存中查找。如果找不到数据,则系统将在 数据库智能闪存缓存中查找。如果它在那⾥找不到数据,则只会在磁盘存储中查 找。您必须在Oracle Real Application Clusters环境中的所有实例上配置闪存缓存, 或者不配置任何节点的闪存存储。

    •最近最少使⽤列表(LRU):包含指向脏缓冲区和⾮脏缓冲区的指针。 LRU 列表有⼀个热端和⼀个冷端。冷缓冲区是近未使⽤过的缓冲区。热缓冲区经常被 访问并且近已经被使⽤。从概念上讲,只有⼀个LRU,但是对于数据并发,数据 库实际上使⽤了多个LRU。

    •检查点队列 (Checkpoint queue):检查点队列是⼀个链表结构,是由缓冲区 头部结构构成;当数据块被修改后,缓冲区通过此链表结构来跟踪数据块的修改。 链表的顺序是根据早应⽤于该数据块的RBA(Redo Block Address)地址排序得 到的。

    •Flash缓冲区 (Flash Buffer Area):由DEFAULT Flash LRU链和KEEP Flash LRU链组成。如果没有数据库智能闪存缓存,则当进程尝试访问某个块并且该块在 缓冲区缓存中不存在时,该块将⾸先从磁盘读⼊内存(物理读取)。当内存中缓冲 区⾼速缓存已满时,将根据近少使⽤ (LRU) 机制将缓冲区从内存中逐出。使⽤ Database Smart Flash Cache,当⼲净的内存中缓冲区过期时,该缓冲区的内容将 通过Database Writer进程 (DBWn) 在后台写⼊闪存中,并且缓冲区头作为元数据保 留在内存中DEFAULT闪存或KEEP闪存LRU列表,具体取决于FLASH_CACHE对象 属性的值。 KEEP闪存LRU列表⽤于将缓冲区头保留在单独的列表上,以防⽌常规 缓冲区头替换它们。因此,属于指定为KEEP的对象的闪存缓冲区标头倾向于在闪 存缓存中保留更⻓时间。如果将FLASH_CACHE对象属性设置为NONE,则系统不会在闪存缓存或内存中保留相应的缓冲区。当再次访问已过期的内存缓冲区时,系 统将检查闪存缓存。如果找到了缓冲区,它将从闪存缓存中读回它,这仅花费从磁 盘读取的时间的⼀⼩部分。跨实时应⽤程序群集 (RAC) 的闪存缓存缓冲区的⼀致性 与缓存融合的维护⽅式相同。因为闪存⾼速缓存是扩展⾼速缓存,并且直接路径I/O 完全绕过了缓冲区⾼速缓存,所以此功能不⽀持直接路径I/O。请注意,系统不会将 脏缓冲区放⼊闪存缓存中,因为它可能必须将缓冲区读取到内存中才能对它们进⾏ 检查点,因为写⼊闪存缓存不会计⼊检查点。

    注意:更多详细信息,请看如下内容:Database Buffer Cache.

     

    9. 内存中列式存储区(In-Memory Area)

    In-Memory存储区是⼀个可选的SGA组件,其中包含内存中列存储(IM列存 储),该存储区使⽤针对快速扫描进⾏了优化的列格式将表和分区存储在内存中。 IM 列存储使数据能够以传统的⾏格式(在缓冲区⾼速缓存中)和列格式同时在SGA中填 充。数据库透明地将在线事务处理 (OLTP) 查询(例如主键查找)发送到缓冲区⾼速缓 存,并将分析和报告查询发送到IM列存储。在获取数据时,Oracle数据库还可以从同 ⼀查询中的两个内存区域读取数据。双格式体系结构不会使内存需求加倍。缓冲区⾼ 速缓存经过优化,可以以⽐数据库⼩得多的⼤⼩运⾏。

    您应该仅在IM列存储中填充关键的数据。要将对象添加到IM列存储中,请在创 建或更改对象时为该对象打开INMEMORY属性。您可以在表空间(对于表空间中的所 有新表和视图),表,(⼦)分区,物化视图或对象内的列⼦集上指定此属性。

    IM列存储以优化的存储单元(⽽不是传统的Oracle数据块)管理数据和元数据。 内存中压缩单元 (IMCU) 是⼀种压缩的只读存储单元,其中包含⼀个或多个列的数 据。快照元数据单元 (SMU) 包含相关IMCU的元数据和事务信息。每个IMCU都映射到 ⼀个单独的SMU。

    表达式统计信息存储 (ESS) 是⼀个存储有关表达式评估的统计信息的存储库。 ESS驻留在SGA中,并且也保留在磁盘上。启⽤IM列存储后,数据库会将ESS⽤于其 内存中表达式(IM表达式)功能。内存中表达单元 (IMEU) 是⽤于存储实现的IM表达式和⽤户定义的虚拟列的存储容器。请注意,ESS独⽴于IM列存储。 ESS是数据库的 永久组件,不能禁⽤。

    从概念上讲,IMEU是其⽗IMCU的逻辑扩展。就像IMCU可以包含多个列⼀样, IMEU可以包含多个虚拟列。每个IMEU都恰好映射到⼀个IMCU,映射到同⼀⾏集。 IMEU包含与其关联的IMCU中包含的数据的表达结果。填充IMCU后,还将填充关联 的IMEU。

    典型的IM表达式包含⼀列或多列(可能带有常量),并且与表中的⾏具有⼀对⼀ 的映射关系。例如,⼀个EMPLOYEES表的IMCU包含Weekly_salary列的1-1000⾏。 对于此IMCU中存储的⾏,IMEU计算⾃动检测到的IM表达式weekly_salary * 52,并将 ⽤户定义的虚拟列Quarterly_salary定义为weekly_salary * 12。 IMCU中的第三⾏下映 射到IMEU中的第三⾏下。

    In-Memory区细分为两个池:⼀个1MB列式数据池,⽤于存储填充到内存中的实 际列格式数据 (IMCU和IMEU),以及⼀个64K元数据池,⽤于存储有关对象的元数 据。填充到IM列存储中。这两个库的相对⼤⼩由内部启发算法确定。In-Memory区中 的⼤部分内存都分配给1MB池。内存区域的⼤⼩由初始化参数INMEMORY_SIZE(默 认值为0)控制,并且⼩⼤⼩必须为100MB。从Oracle Database 12.2开始,您可以 通过ALTER SYSTEM命令将INMEMORY_SIZE参数增加⾄少128MB,来动态增加内存 区域的⼤⼩。请注意,⽆法动态缩⼩内存区域的⼤⼩。

    In-Memory表在⾸次访问表数据或数据库启动时会获取在IM列存储中分配的 IMCU。通过从磁盘格式转换为新的内存列式格式,可以创建表的内存副本。每次实例 重新启动时都会完成此转换,因为IM列存储副本仅驻留在内存中。完成此转换后,表 的内存版本逐渐可⽤于查询。如果对表进⾏了部分转换,则查询能够使⽤部分内存版 本并转到磁盘进⾏其余操作,⽽不必等待整个表都被转换。

    为了响应查询和数据操作语⾔ (DML),服务器进程扫描列数据并更新SMU元数 据。后台进程将磁盘中的⾏数据填充到IM列存储中。In-Memory协调进程 (IMCO) 是 启动后台填充和重新填充列式数据的后台进程。空间管理协调进程 (SMCO) 和空间管 理⼯作进程 (Wnnn) 是后台进程,它们代表IMCO实际填充和重新填充数据。 DML块 更改将写⼊缓冲区⾼速缓存,然后再写⼊磁盘。 然后,后台进程根据元数据失效和查 询请求将磁盘中的⾏数据重新填充到IM列存储中。

    您可以启⽤ In-Memory 快速启动功能,以将IM列存储中的列数据以压缩列格式 写回到数据库中的表空间。 此功能使数据库启动更快。 请注意,此功能不适⽤于 IMEU,它们总是从IMCU动态填充。

    注意:更多详细信息,请看如下内容:Introduction to Oracle Database In-Memory.

     

    10.数据库数据⽂件(Database Data Files)

    数据库是⼀组存储⽤户数据和元数据的物理⽂件。元数据由有关数据库服务器的 结构,配置和控制信息组成。您可以将数据库设计为多租户容器数据库 (CDB) 或⾮容 器数据库 (non-CDB)(20c 中只⽀持多租户结构)。

    CDB由⼀个CDB根容器(也称为根),唯⼀的⼀个种⼦可插⼊数据库(种⼦ PDB),零个或多个⽤户创建的可插拔数据库(简称为PDB)以及零个或多个应⽤程 序容器组成。整个CDB称为系统容器。对于⽤户或应⽤程序,PDB在逻辑上显示为单 独的数据库。

    CDB根容器名为CDB $ ROOT,包含多个数据⽂件,控制⽂件,重做⽇志⽂件, 闪回⽇志和归档的重做⽇志⽂件。数据⽂件存储与所有PDB共享的Oracle提供的元数 据和普通⽤户(每个容器中已知的⽤户)。

    种⼦PDB名为PDB $ SEED,是系统提供的PDB模板,其中包含可⽤于创建新 PDB的多个数据⽂件。

    常规PDB包含多个数据⽂件,这些⽂件包含⽀持应⽤程序所需的数据和代码。例 如,⼈⼒资源应⽤程序。⽤户仅与PDB交互,⽽不与种⼦PDB或根容器交互。您可以在CDB中创建多个PDB。多租户体系结构的⽬标之⼀是每个PDB与应⽤程序具有⼀对 ⼀的关系。
    应⽤程序容器是CDB中⽤于存储应⽤程序数据的PDB的可选集合。创建应⽤程序 容器的⽬的是拥有独⼀的主应⽤程序定义。 CDB中可以有多个应⽤程序容器。

    数据库分为称为表空间的逻辑存储单元,这些逻辑存储单元共同存储所有数据库 数据。每个表空间由⼀个或多个数据⽂件构成。根容器和常规PDB具有SYSTEM, SYSAUX,USERS,TEMP和UNDO表空间(在常规PDB中为可选)。种⼦PDB具有 SYSTEM,SYSAUX,TEMP和可选的UNDO表空间。

    注意:更多详细信息,请看如下内容:Introduction to the Multitenant Architecture.

     

    11.数据库系统⽂件(Database System Files)

    以下数据库系统⽂件在Oracle数据库操作期间使⽤,并位于数据库服务器上。请 注意,数据⽂件是属于数据库容器的物理⽂件,在此不再描述。

    •控制⽂件:控制⽂件是必需⽂件,⽤于存储有关数据⽂件和联机重做⽇志⽂件 的元数据;例如,它们的名称和状态。数据库实例需要此信息才能打开数据库。控 制⽂件还包含在数据库未打开时必须可访问的元数据。强烈建议您在数据库服务器 中制作控制⽂件的多个副本,以实现⾼可⽤性。

    •参数⽂件:此必需⽂件定义了数据库实例启动时的配置⽅式。它可以是初始化 参数⽂件 (pfile) 或服务器参数⽂件 (spfile)。

    •联机重做⽇志⽂件:这些必需的⽂件在发⽣更改时将更改存储到数据库中,并 ⽤于数据恢复。

    •⾃动诊断存储库 (ADR):ADR是基于⽂件的存储库,⽤于存储数据库诊断数 据,例如跟踪,转储,警报⽇志,运⾏状况监视器报告等。它具有跨多个实例和多 个产品的统⼀⽬录结构。数据库,Oracle⾃动存储管理 (Oracle ASM),侦听器, Oracle Clusterware和其他Oracle产品或组件将所有诊断数据存储在ADR中。每个产 品的每个实例都将诊断数据存储在ADR中其⾃⼰的主⽬录下。

    •备份⽂件:这些可选⽂件⽤于数据库恢复。通常,当介质故障或⽤户错误损坏 或删除原始⽂件时,可以还原备份⽂件。

    •存档的重做⽇志⽂件:这些可选⽂件包含数据库实例⽣成的数据更改的持续历 史记录。使⽤这些⽂件和数据库备份,您可以恢复丢失的数据⽂件。也就是说,存 档⽇志可恢复已还原的数据⽂件。

    •密码⽂件:此可选⽂件使使⽤SYSDBA,SYSOPER,SYSBACKUP, SYSDG,SYSKM,SYSRAC和SYSASM⻆⾊的⽤户可以远程连接到数据库实例并 执⾏管理任务。

    •钱包:对于应⽤程序使⽤密码凭据连接到数据库的⼤规模部署,可以将此类凭 据存储在客户端Oracle钱包中。 Oracle钱包是⼀个安全的软件容器,⽤于存储身份 验证和签名凭证。可能的钱包包括⽤于⽤户凭证的Oracle钱包,⽤于透明数据加密 (TDE) 的加密钱包和⽤于数据库备份云模块的Oracle公共云 (OPC) 钱包。钱包是可 选的,但建议使⽤。

    •块更改跟踪⽂件:块更改跟踪通过将更改的块记录在块更改跟踪⽂件中,从⽽ 提⾼了增量备份的性能。在增量备份过程中,Oracle Recovery Manager (RMAN) ⽆需扫描所有数据块来确定哪些块已更改,⽽是使⽤此⽂件来标识需要备份的已更 改块。块更改跟踪⽂件是可选的。

    •闪回⽇志:闪回数据库在效果上类似于常规的时间点恢复。它使您可以将数据 库⼀次恢复到近的状态。闪回数据库使⽤其⾃⼰的⽇志记录机制,创建闪回⽇志 并将其存储在快速恢复区域中。仅当闪回⽇志可⽤时,才能使⽤闪回数据库。要利 ⽤此功能,必须预先设置数据库以创建闪回⽇志。闪回⽇志是可选的。

    控制⽂件,联机重做⽇志⽂件和归档重做⽇志⽂件可以多路复⽤,这意味着可以 在单独的位置⾃动维护两个或多个相同的副本。

    注意:更多详细信息,请看如下内容:Physical Storage Structures.

     

    12.应⽤容器(Application Containers)

    应⽤程序容器是⽤户创建的可选CDB组件,⽤于存储应⽤程序PDB的数据和元数 据。 CDB可以包含零个或多个应⽤程序容器。 ⼀个应⽤程序容器仅由⼀个应⽤程序 根⽬录和⼀个或多个应⽤程序PDB组成,它们插⼊CDB根⽬录中。 应⽤程序根⽬录属 于CDB根⽬录,不属于其他容器,并且存储公⽤的元数据和数据。

    典型的应⽤程序将安装应⽤程序普通⽤户,元数据链接的公共对象和数据链接的 公共对象。 您可以在⼀个应⽤程序容器中创建多个与销售相关的PDB,这些PDB共享 ⼀个由⼀组公⽤表和表定义组成的应⽤程序后端。

    应⽤程序根⽬录,应⽤程序种⼦和应⽤程序PDB都有⼀个SYSTEM,SYSAUX, TEMP,USERS和可选的UNDO表空间。 每个表空间代表⼀个或多个数据⽂件。

    注意:更多详细信息,请看如下内容:About Application Containers.

     

    13.⾃动诊断资料库 (Automatic Diagnostic Repository) (ADR)

    ⾃动诊断存储库 (ADR) 是⽤于数据库诊断数据的系统范围的跟踪和⽇志记录中央 存储库。它包括以下各项:

    •后台跟踪⽂件:每个数据库后台进程都可以写⼊关联的跟踪⽂件。当进程检测 到内部错误时,该进程会将有关错误的信息转储到其跟踪⽂件中。写⼊跟踪⽂ 件的某些信息供数据库管理员使⽤,⽽其他信息则供Oracle⽀持服务使⽤。通 常,数据库后台进程跟踪⽂件名包含Oracle系统标识符 (SID),后台进程名和 操作系统进程号。⽤于RECO进程的跟踪⽂件的示例是 mytest_reco_10355.trc。

    •前台跟踪⽂件:每个服务器进程都可以写⼊关联的跟踪⽂件。当进程检测到内 部错误时,该进程会将有关错误的信息转储到其跟踪⽂件中。服务器进程跟踪 ⽂件名包含Oracle SID,字符串ora和操作系统进程号。服务器进程跟踪⽂件 名的示例是mytest_ora_10304.trc。

    •转储⽂件:诊断转储⽂件是⼀种特殊的跟踪⽂件,其中包含有关状态或结构的 详细时间点信息。转储⽂件通常是响应事件的诊断数据的⼀次性输出,⽽跟踪 ⽂件往往是诊断数据的连续输出。

    •运⾏状况监视器报告:Oracle数据库包括⼀个称为运⾏状况监视器的框架,⽤ 于在数据库上运⾏诊断检查。运⾏状况检查可检测⽂件损坏,物理和逻辑块损 坏,撤消和重做损坏,数据字典损坏等。健康检查会⽣成有关其发现的报告, 并在许多情况下会提供解决问题的建议。

    •事件包:对于将诊断数据上传到Oracle⽀持的⾃定义⽅法,您⾸先将数据收集 到称为事件包(包)的中间逻辑结构中。程序包是存储在ADR中的元数据的集合,并且指向诊断数据⽂件以及ADR内外的其他⽂件。创建程序包时,选择⼀ 个或多个问题以添加到程序包中。然后,⽀持⼯作台将与所选问题相关的问题 信息,事件信息和诊断数据(例如跟踪⽂件和转储)⾃动添加到程序包中。

    •事件转储:发⽣事件时,数据库将⼀个或多个转储写⼊为事件创建的事件⽬ 录。事件转储还包含⽂件名中的事件编号。

    •告警⽇志⽂件:数据库的告警⽇志是消息和错误的按时间先后顺序排列的⽇ 志。 Oracle建议您定期查看告警⽇志。

    注意:更多详细信息,请看如下内容:Automatic Diagnostic Repository.

     

    14.备份⽂件 (Backup Files)

    数据库备份可以是物理备份也可以是逻辑备份。

    •物理备份是物理数据库⽂件的副本。您可以使⽤Recovery Manager (RMAN) 或操作系统实⽤程序进⾏物理备份。

    •逻辑备份包含表,存储过程和其他逻辑数据。您可以使⽤Oracle数据库实⽤程 序(如数据泵导出)提取逻辑数据,并将其存储在⼆进制⽂件中。逻辑备份可 以补充物理备份。

    RMAN创建的数据库备份存储为映像副本或备份集。

    •映像副本是数据⽂件,控制⽂件或存档的重做⽇志⽂件的逐位磁盘复制。您可 以使⽤操作系统实⽤程序或RMAN创建物理⽂件的映像副本,然后使⽤任⼀⼯ 具来还原它们。映像副本对磁盘很有⽤,因为您可以增量更新它们并就地恢复 它们。

    •备份集是RMAN创建的专有格式,其中包含⼀个或多个数据⽂件,已归档的重 做⽇志⽂件,控制⽂件或服务器参数⽂件中的数据。备份集的⼩单位是⼀个 称为备份⽂件的⼆进制⽂件。备份集是RMAN可以将备份写⼊顺序设备(例如 磁带机)的唯⼀形式。备份集的优点之⼀是RMAN使⽤未使⽤的块压缩来节省 备份数据⽂件的空间。备份集中仅包括数据⽂件中⽤于存储数据的那些块。备份集也可以被压缩,加密,发送到磁带,并使⽤数据⽂件副本不可⽤的⾼级未 使⽤空间压缩。

    RMAN可以与媒体管理库 (MML) ,系统备份到磁带 (SBT) 软件(可以创建到磁带 的备份),Oracle数据库备份云服务,或零数据丢失恢复设备交互(通常称为恢复设 备)。

    注意:更多详细信息,请看如下内容:

    Backup and Recovery

    About Zero Data Loss Recovery Appliance

     

    15.进程监控进程 (PMON)

    进程监控进程 (PMON) 是⼀个后台进程,它定期扫描所有进程以查找任何异常死 亡的进程。 然后,PMON负责协调由清理主进程 (CLMN) 和清理从属进程 (CLnn) 执 ⾏的清理。

    PMON作为操作系统进程⽽不是线程运⾏。 除数据库实例外,PMON还可以在 Oracle⾃动存储管理 (ASM) 实例和Oracle ASM代理实例上运⾏。

    注意:获得完整的进程列表,请看如下内容:Background Processes.

     

    16.进程管理进程 (PMAN)

    进程管理进程 (PMAN) 是⼀个后台进程,可根据需要监视,产⽣和停⽌以下各 项:

    •分派器和共享服务器进程

    •数据库驻留连接池的连接代理和池化服务器进程

    •作业队列流程

    •可重启后台程序

    PMAN作为操作系统进程⽽不是线程运⾏。 除数据库实例外,PMAN还可以在 Oracle⾃动存储管理 (ASM) 实例和Oracle ASM代理实例上运⾏。

    注意:获得完整的进程列表,请看如下内容:Background Processes.

     

    17.监听器注册进程 (LREG)

    监听器注册进程 (LREG) 是⼀个后台过程,⽤于将实例,服务,处理程序和端点 通知给监听器。

    LREG可以作为线程或操作系统进程运⾏。 除了数据库实例之外,LREG还可以 在Oracle⾃动存储管理 (ASM) 实例和Oracle Real Application Clusters (RAC) 上运⾏。

    注意:获得完整的进程列表,请看如下内容:Background Processes.

     

    18.系统监控进程 (SMON)

    系统监视器进程 (SMON) 是后台进程,它执⾏许多数据库维护任务,其中包括:

    •创建和管理临时表空间元数据,并回收孤⽴的临时段使⽤的空间

    •通过基于Undo表空间使⽤情况统计信息来对undo段进⾏上线,下线和收缩来 维护undo表空间

    •处于暂时和不⼀致状态时清理数据字典

    •维护系统更改号 (SCN) 到时间的映射表,⽤于⽀持Oracle闪回功能

    SMON对后台活动期间引发的内部和外部错误可迅速恢复。 SMON可以作为线程 或操作系统进程运⾏。 在Oracle Real Application Clusters (RAC) 数据库中,⼀个实 例的SMON进程可以对失败的其他实例执⾏实例恢复。

    注意:获得完整的进程列表,请看如下内容:Background Processes.

     

    19.数据库写⼊进程 (DBWn)

    数据库写⼊进程 (DBWn) 是⼀个后台进程,主要将数据块写⼊磁盘。它还处理检 查点,⽂件打开同步,以及记录块写⼊记录。配置闪存后,DBWn还将写⼊数据库智 能闪存 (闪存) 缓冲区。

    在许多情况下,DBWn写⼊的块分散在整个磁盘上。因此,写操作往往⽐⽇志写 程序 (LGWR) 执⾏的顺序写要慢。如果可能,DBWn将执⾏多块写⼊,以提⾼效率。 多块写⼊中写⼊的块数因操作系统⽽异。

    DB_WRITER_PROCESSES初始化参数指定数据库写⼊进程的数量。可能有1到 100个数据库写⼊进程。前36个数据库写⼊进程的名称为 DBW0-DBW9 和 DBWaDBWz。第37⾄第100个数据库写⼊器进程的名称是 BW36-BW99。数据库为 DB_WRITER_PROCESSES参数选择适当的默认设置,或者根据CPU和处理器组的数 量来调整⽤户指定的设置。

    注意:获得完整的进程列表,请看如下内容:Background Processes.

     

    20.检查点进程 (CKPT)

    检查点进程 (CKPT) 是⼀个后台进程,该进程在特定时间通过向数据库写⼊进程 (DBWn) 传递消息来启动检查点请求,以开始写⼊脏缓冲区。 完成单个检查点请求 后,CKPT会更新数据⽂件头和控制⽂件以记录新的检查点。

    CKPT每三秒钟检查⼀次,以查看内存量是否超过了PGA_AGGREGATE_LIMIT初 始化参数的值,如果是,则采取措施。

    CKPT可以作为线程或操作系统进程运⾏。 除数据库实例外,CKPT还可以在 Oracle⾃动存储管理 (ASM) 实例上运⾏。

    注意:获得完整的进程列表,请看如下内容:Background Processes.

     

    21.可管理性监视进程 (MMON)和可管理性监视精简进程 (MMNL)

    可管理性监视进程 (MMON) 和可管理性监视精简进程 (MMNL) 是后台进程,它 们执⾏与⾃动⼯作负载存储库 (AWR) 相关的任务。 AWR是历史性能数据的存储库, 其中包括系统,会话,单个SQL语句,段和服务的累积统计信息。它⽤于问题检测和 ⾃我调优。

    MMON从SGA收集各种内存统计信息,对其进⾏过滤,然后每60分钟在⾃动⼯ 作负载存储库 (AWR) 中创建这些统计信息的快照。 60分钟是默认值,可以更改。它 还执⾏⾃动数据库诊断监视器 (ADDM) 分析,并为超出其阈值的指标发出警报。

    MMNL收集会话统计信息(例如⽤户ID,状态,主机以及它正在执⾏的SQL), 并将其存储在活动会话历史记录 (ASH) 缓冲区中。具体地说,MMNL每秒在SGA中对 V $ SESSION和V $ SESSION_WAIT视图进⾏采样,然后将该数据记录在V $ ACTIVE_SESSION_HISTORY视图中。不采样⾮活动会话。 ASH被设计为内存中的滚 动缓冲区,因此,较早的信息将在需要时被覆盖。当ASH缓冲区已满或MMON拍摄快 照时,MMNL将ASH缓冲区刷新(清空)到AWR的 DBA_HIST_ACTIVE_SESS_HISTORY视图中。由于空间昂贵,因此每10个条⽬中只有 ⼀个被刷新。 MMNL还计算指标。

    MMON和MMNL都可以作为线程或操作系统进程运⾏。除了数据库实例之外, MMON和MMNL还可以在⾃动存储管理(ASM)实例上运⾏。

    注意:更多详细信息,请看如下内容:

    Managing the SYSAUX Tablespace

    Managing the Automatic Workload Repository

    Active Session History Statistics

    获得完整的进程列表,请看如下内容:Background Processes.

     

    22.恢复进程 (RECO)

    恢复进程 (RECO) 是⼀个后台进程,⽤于解决由于分布式数据库中的⽹络或系统 故障⽽导致挂起的分布式事务。

    RECO可以作为线程或操作系统进程运⾏。

    注意:获得完整的进程列表,请看如下内容:Background Processes.

     

    23.⽇志写⼊进程 (LGWR)

    ⽇志写⼊进程(LGWR)是⼀个后台进程,可将重做⽇志条⽬顺序写⼊重做⽇志 ⽂件。重做⽇志条⽬在系统全局区域 (SGA) 的重做⽇志缓冲区中⽣成。如果数据库具 有多路复⽤的重做⽇志,则LGWR将相同的重做⽇志条⽬写⼊重做⽇志⽂件组的所有 成员。

    LGWR处理速度⾮常快,必须被协同⼯作,并将操作委托给Log Writer Worker帮 助程序 (LGnn),这些程序可以从并发操作中受益,主要是将重做从⽇志缓冲区写⼊重 做⽇志⽂件,并将写⼊完成的信息投送给正在等待的前台进程。

    重做传输从属进程(TT00-zz)将⽇志从当前的联机和备⽤重做⽇志发送到配置 为异步 (ASYNC) ⽇志传输的远程备⽤⽬的地。

    LGWR可以作为线程或操作系统进程运⾏。除数据库实例外,LGWR还可以在 Oracle ASM实例上运⾏。 Oracle Real Application Clusters (RAC) 配置中的每个数据 库实例都有其⾃⼰的重做⽇志⽂件集。

    注意:获得完整的进程列表,请看如下内容:Background Processes.

     

    24.归档进程 (ARCn)

    归档进程 (ARCn) 是后台进程,仅当数据库处于ARCHIVELOG模式并启⽤⾃动归 档时才存在,在这种情况下ARCn会⾃动归档联机重做⽇志⽂件。⽇志写⼊进程 (LGWR) 在归档之前不能重⽤和覆盖联机重做⽇志⽂件组。

    数据库将根据需要启动多个归档程序进程,以确保已填充的联机重做⽇志的归档 不会落后。可能的过程包括 ARC0-ARC9 和 ARCa-ARCt(31个可能的⽬的地)。

    LOG_ARCHIVE_MAX_PROCESSES初始化参数指定数据库初调⽤的ARCn进 程数。如果您预计归档⼯作量很⼤,例如在批量加载数据期间,则可以增加归档进程 的⼤数量。归档进程也可以有多个归档⽇志⽬的地。建议每个⽬的地⾄少有⼀个归 档进程。

    ARCn可以作为线程或操作系统进程运⾏。

    注意:获得完整的进程列表,请看如下内容:Background Processes.

     

    25.作业队列协调进程 (CJQ0)

    作业队列协调器进程 (CJQ0) 是⼀个后台进程,它从数据字典中选择需要运⾏的 作业,并⽣成作业队列从属进程 (Jnnn) 来运⾏这些作业。 Oracle Scheduler会根据需 要⾃动启动和停⽌CJQ0。 JOB_QUEUE_PROCESSES初始化参数指定可以为执⾏作 业创建的⼤进程数。 CJQ0仅启动要运⾏的作业数量和可⽤资源所需数量的作业队 列进程。

    作业队列从属进程 (Jnnn) 执⾏作业协调分配的作业。选择作业进⾏处理时,作业 从属进程将执⾏以下操作:

    •收集运⾏作业所需的所有元数据,例如:程序参数和权限信息。

    •以作业的所有者身份启动数据库会话,启动事务,然后开始执⾏作业。

    •作业完成后,从属进程将提交并结束事务。

    •关闭会话。

    完成⼯作后,从属进程将执⾏以下操作:

    •重新安排作业(如果需要)

    •更新作业表中的状态以反映作业是否已完成或计划再次运⾏

    •在作业⽇志表中插⼊⼀个条⽬

    •更新运⾏计数,并在必要时更新失败和重试计数

    •清理

    •寻找新⼯作(如果没有,则休眠)

    CJQ0和Jnnn都可以作为线程或操作系统进程运⾏。

    注意:获得完整的进程列表,请看如下内容:Background Processes.

     

    26.恢复写⼊进程 (RVWR)

    Recovery Writer进程 (RVWR) 是⼀个后台进程,⽤于闪回整个数据库。 也就是 说,如果您具有必需的闪回⽇志,它将撤消从数据库当前状态到过去某个时间的事 务。 启⽤闪回或有保证的还原点时,RVWR将闪回数据写⼊快速恢复区域中的闪回数 据库⽇志中。

    RVWR可以作为线程或操作系统进程运⾏。

    注意:获得完整的进程列表,请看如下内容:Background Processes.

     

    27.闪回数据归档进程 (FBDA)

    闪回数据存档进程 (FBDA) 是后台进程,提供了在表的整个⽣命周期内跟踪和存 储表中事务性更改的功能。 这样,您可以及时向后闪回表,以恢复表的状态。

    提交修改跟踪表的事务时,FBDA会检查是否正在⽣成新的Undo,过滤与标记为 存档的对象相关的内容,并将Undo信息复制到闪回数据存档表空间中。 FBDA维护当 前⾏上的元数据,并跟踪已存档的数据量。

    FBDA还负责⾃动管理闪回数据存档的空间,组织(分区表空间)和保留时间。 FBDA还跟踪已跟踪交易的归档进度。

    FBDA可以作为线程或操作系统进程运⾏。

    注意:获得完整的进程列表,请看如下内容:Background Processes.

     

    28.空间管理协调进程 (SMCO)

    空间管理协调进程 (SMCO) 是⼀个后台进程,⽤于调度各种空间管理任务的执 ⾏,包括主动空间分配和空间回收。 SMCO动态产⽣空间管理从属进程 (Wnnn) 来实 现这些任务。请注意,内存中协调进程 (IMCO) 是启动后台填充和重新填充列数据的 后台进程。

    Wnnn从属进程代表空间管理和Oracle的In-Memory选项执⾏⼯作。

    •Wnnn进程是由SMCO动态⽣成的从属进程,⽤于在后台执⾏空间管理任务。 这些任务包括根据空间使⽤量增⻓分析将空间预分配到本地管理的表空间和 SecureFiles段中,以及从删除的段中回收空间。这些任务还包括快速摄取延迟 插⼊。启动后,从属进程将充当⾃治代理。完成任务执⾏后,它将⾃动从队列 中拾取另⼀个任务。该进程在⻓时间闲置后会⾃⾏终⽌。

    •Wnnn进程填充并重新填充启⽤In-Memory功能的对象。内存中协调进程 (IMCO) 会启动后台填充和重新填充柱状数据。 IMCO后台进程和前台进程将 利⽤Wnnn从属进程进⾏填充和再填充。 IMCO使⽤Wnnn进程预填充优先级为 LOW/MEDIUM/HIGH/CRITICAL的启⽤In-Memory的对象,并重新填充InMemory的对象。 Wnnn从属进程上运⾏的内存填充和重新填充任务也从前台 进程启动,以响应引⽤了启⽤In-Memory对象的查询和DML操作。

    SMCO和Wnnn都可以作为线程或操作系统进程运⾏。

    注意:获得完整的进程列表,请看如下内容:Background Processes.

     

    29.分派进程 (Dnnn) 和 共享服务器进程 (Snnn)

    在共享服务器体系结构中,客户端连接到分派进程 (Dnnn),该进程为每个连接创 建虚电路。 当客户端将数据发送到服务器时,分派进程将数据接收到虚电路中,并将 活动电路放置在公共队列中,以由空闲的共享服务器进程 (Snnn) 进⾏处理。 然后, Snnn从虚电路读取数据并执⾏完成请求所需的数据库⼯作。 当Snnn必须将数据发送 到客户端时,Snnn将数据写回到虚电路中,⽽Dnnn会将数据发送到客户端。 Snnn完 成客户端请求后,它将虚电路释放回Dnnn,并可以⾃由处理其他客户端。

    Snnn和Dnnn都可以作为线程或操作系统进程运⾏。 除数据库实例外,Dnnn还在 共享服务器上运⾏。

    注意:获得完整的进程列表,请看如下内容:Background Processes.