Oracle 19C 系统结构介绍 — by Firsouler 2021/03/11
- 1.概览
- 2.体系结构介绍
- 参考
1.概览
如上图所示,为Oracle19C架构图,相比于我们常用的Oracle11g,12C以后多了一种架构,就是CDB模式。
思考: CDB模式下,PDB单独使用的有哪些文件,共享的有哪些,为什么这样划分?
CDB简单介绍
我们简单看下CDB简单架构,它主要有两种方式,一个是有应用容器的,一个没有的:
应⽤程序容器是CDB中⽤于存储应⽤程序数据的PDB的可选集合。创建应⽤程序 容器的⽬的是拥有独⼀的主应⽤程序定义。CDB中可以有多个应⽤程序容器。
CDB有容器的方式:
CDB没有容器的方式:
数据库服务器
一个Oracle数据库至少由一个数据库实例和一个数据库组成。数据库实例部分处理内存和进程,数据库部分则由称为数据文件的物理文件组成,并且可以是非容器数据库或多租户容器数据库。Oracle数据库在其运行期间还会使用多个数据库系统文件。
监听器是一个数据库服务器进程。它接收客户端请求,建立与数据库实例的连接,然后将客户端连接移交给服务器进程。
监听器可以在数据库服务器上本地运行,也可以远程运行。典型的Oracle RAC环境是远程运行的。 —==怎么理解?==
数据库实例
数据库实例包含一组Oracle数据库后台进程和内存结构。主要的内存结构是系统全局区 (SGA) 和程序全局区 (PGA)。后台进程对数据库中存储的数据(数据文件)进行操作,并使用内存结构完成其工作。数据库实例仅存在于内存中。
Oracle数据库还创建服务器进程,以代表客户端程序处理与数据库的连接,并执行客户端程序的工作。例如,解析和运行SQL语句,以及检索结果并将结果返回给客户端程序。这些类型的服务器进程也称为前台进程。
思考: 数据库和实例到底什么关系,RAC呢?
相关视图:
v$parameter --参数
v$systat --实例运行以来累计的资源使用情况
v$session_wait
v$session_event
v$system_event
v$event_name
v$lock
v$latch_children
v$bh --buffer 信息
x$bh
v$transaction
2.体系结构介绍
内存设置参考
# oltp
sga_target = (物理内存*80%)*80%
sga_max_size=(物理内存*80%)*80%
pga_aggregate_target=物理内存*80%)*20%
# olap
sga_target = (物理内存*80%)*50%
sga_max_size=(物理内存*80%)*50%
pga_aggregate_target=物理内存*80%)*50%
--评估
v$memory_dynamic_components:显示自动内存管理的各内存真实大小,包括sga和pga
v$memory_resize_ops : 显示最新的800个自动和收到进行内存调整的操作,不包括正在进行调整的操作
v$memory_current_resize_ops :显示正在进行的内存调整操作,包括自动和收到
v$sga_dynamic_components: 显示自动公司内存管理模式下sga各内存真实大小
v$sga_current_resize_ops :显示正在进行的sga内存调整,包括自动和收到
v$sga_dynamic_free_memory:显示系统可用的sga动态调整内存空间
2.1 系统全局区(System Global Area)
系统全局区域 (SGA) 是包含一个Oracle数据库实例的数据和控制信息的存储区域。数据库所有的服务器进程和后台进程共享方式使用SGA。启动数据库实例时,将会显示SGA分配的内存量。SGA包含以下数据结构:
1) 日志缓冲区 (Redo log buffer)
是SGA中的循环缓冲区,用于保存有关对数据库所做的更改的信息。这些信息存储在重做条目中。重做条目包含重建(或重做)通过数据操作语言 (DML),数据定义语言 (DDL) 或内部操作对数据库所做的更改所必需的信息。如有必要,可将重做条目用于数据库恢复。
==Log Buffer该设置多大?==
- Log Buffer 写满1M
- 每隔3秒
- Log Buffer写满1/3时
-- type: 3-Integer
1* select name,type,value from v$parameter where name like 'log_buffer%'
NAME TYPE VALUE
-------------------- ---------- --------------------
log_buffer 3 8519680
2) 闪回缓冲区 (FlashBack buffer)
是SGA中的可选组件。启用闪回数据库后,将启动称为恢复写程序 (RVWR) 的后台进程。RVWR定期将修改后的块从缓冲区高速缓存复制到闪回缓冲区,然后将闪回数据库数据从闪回缓冲区写入闪回数据库日志,以循环方式重用。
3) 共享池 (Shared pool)
主要由报错数据字典的data dictionary cache 和保存SQL、PL/SQL代码和执行计划的library cache组成。在多个用户之间共享各种的缓存结构;例如,共享池存储已解析的SQL,PL/SQL代码,系统参数和数据字典信息。共享池几乎涉及数据库中发生的每个操作。例如,如果用户执行SQL语句,则Oracle数据库将访问共享池。如上图所示,共享池包含以下内容:
库⾼速缓存 (Library cache)
存储可执⾏的 SQL和PL/SQL代码,该缓存包含共享的SQL和PL/SQL区域以及控制结构,例如锁和库缓存句柄。当执⾏SQL语句时,数据库尝试重⽤以前执⾏的代码。如果库⾼速缓存中存在SQL语句的已解析表示形式并且可以共享,则数据库将重⽤代码。此操作称为软解析或库⾼速缓存命中。否则,数据库必须构建应⽤程序代码的新的可执⾏版本,这称为硬解析或库⾼速缓存未命中。
保留池 (Reserved pool)
可使⽤ 该内存区域来分配连续的⼤块内存,数据库从共享池中按照Chunk⽅式分配内存。Chunk允许将⼤型对象(超过5 KB)加载到缓存中,⽽⽆需单个连续区域。可减少了由于碎⽚⽽耗尽连续内存的可能性。
数据字典⾼速缓存 (Data dictionary cache)
存储有关数据库对象的信息(即字典数据)。此缓存也称为⾏缓存,因为它将数据保存为⾏⽽不是缓冲区。
服务器结果缓存 (Server result cache)
包含SQL查询结果缓存和PL/SQL函数结果缓存,它们共享相同的基础结构。SQL查询结果缓存存储查询和查询⽚段的结果。⼤多数应⽤程序都受益于这种性能改进。PL/SQL函数结果缓存存储函数结果集。结果缓存的良好候 选者是经常调⽤的函数,这些函数依赖于相对静态的数据。—Oracle11g以上
支持服务端和客户端,尤其全表扫描的结果,放入该缓存中,减少热快,io等,提高效率,相关参数:
- result_cache_mode :手动、强制(manual/force)
- result_cache_max_size : 0是关闭,其他值开启
- result_cache_max_result : 单个查询使用最大容量
--eg
select /*+ RESULT_CACHE */ from emp;
--检查rc状态
select DBMS_RESULT_CACHE.STATUS from dual;
--查看rc使用情况
set serveroutput on;
exec dbms_result_cache.memory_report;
--清空rc内存
exec dbms_result_cache.flush;
--相关视图
select * from v$result_cache_statistics; --内存使用情况
select * from v$result_cache_memory; --内存块和统计信息
select * from v$result_cache_objects --被缓存的对象
select * from v$result_cache_dependency -- 结果集数据和依赖表的关联关系
--客户端配置及相关信息,请参考其他资料
其他组件 (Other components)
包括队列,锁存器,信息⽣命周期管理 (ILM) 位图表,活动会话历史记录 (ASH) 缓冲区和其他次要内存结构。
- 排队是共享 的内存结构(锁),⽤于序列化对数据库资源的访问。它们可以与会话或事务相关 联。例如:控制⽂件事务,数据⽂件,实例恢复,介质恢复,事务恢复,作业队列等。
- 锁存器⽤作低级序列化控制机制,⽤于保护SGA中的共享数据结构免于同时访问。例如:⾏⾼速缓存对象,库⾼速缓存pin和⽇志⽂件并⾏写⼊。
4) 数据库高速缓冲区 (Database buffer cache)
⽤于存储从数据⽂件读取的数据块的副本。缓冲区是数据库块⼤⼩的内存 块。每个缓冲区都有⼀个称为数据库缓冲区地址 (DBA) 的地址。缓冲区⾼速缓存的⽬标是优化物理I/O, 并将经常访问的块保留在缓冲区⾼速缓存中,并将不经常访问的块写⼊磁盘。
数据库高速缓冲区包含以下内容
- 默认池 (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):使您可以使⽤闪存设备来增加缓冲区缓 存的有效⼤⼩,⽽⽆需添加更多主内存。
- 最近最少使⽤列表(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列表⽤于将缓冲区头保留在单独的列表上,以防⽌常规缓冲区头替换它们。
==优化技术==
-
latch:cache buffer chains 和 Latch:cache buffer LRU chains:通常情况下,这些事件表示数据库中存在一些数据块被频繁读取,产生热块数据,如频繁读取代码表、undo头数据、单调增长的索引,可通过以下命令查看热点数据
select * from ( select owner,object_type,statistic_name,sum(value) from v$segment_statistics group by owner,object_name,object_type,statistic_name order by sum(value) desc ) where rownum < 10; --or select * from ( select c.owner,c.object_name,sum(a.tch) from x$bh a,v$latch_children b,dba_objects c where a.hladdr=b.addr and a.obj=c.object_id and c.owner <> 'SYS' group by c.owner,c.object_name order by sum(a.tch) desc ) where rownum <= 25;
-
Buffer busy waits :并发访问某个Buffer Cache数据块时出现的等待事件,通过以下语句定位对象:
select object_name,value from v$segment_statistics
where statistic_name = 'buffer busy waits' and value > 2000;
- Read waits :(db file sequential read:索引出现问题/db file parallel read:并行出现问题/db file scattered read:全表扫描),主要通过应用优化,适当增加 db_cache_size 看看效果
5) ⼤池(Large Pool)
⼤池是数据库管理员可以配置的可选内存区域,建议配置合理的值(large_pool_size),避免一些操作使用shared pool,如备份恢复、并行处理、ASM、共享连接等。可以为以下各项提供⼤内存分配:
- ⽤户全局区域 (UGA):共享服务器和Oracle XA接⼝的会话内存(⽤于事务与多个数据库交互)
- I/O 缓冲区 (I/O Buffer Area):I/O服务器进程,并⾏查询操作中使⽤的消息缓冲区,Recovery Manager (RMAN) I/O从属进程的缓冲区,以及存储⾼级排队内存表。
- 延迟插⼊池 (Deferred Inserts Pool):快速提取功能可将数据库中定义为MEMOPTIMIZE FOR WRITE的表进⾏⾼频单⾏数据插⼊。
更详细的请参考官方文档
6) 内存中列式存储区(In-Memory Area)
可选的SGA组件,其中包含内存中列存储(IM列存 储),该存储区使⽤针对快速扫描进⾏了优化的列格式将表和分区存储在内存中。
详情:官方文档搜索 Introduction to Oracle Database In-Memory
2.2 程序全局区(Program Global Area)
一个非共享的内存区域,其中包含专门由服务器和后台进程使用的数据和控制信息。Oracle数据库创建服务器进程,以代表客户端程序处理与数据库的连接。在专用服务器环境中,为每个服务器和启动的后台进程创建一个PGA。每个PGA都由堆栈空间,哈希区域,位图合并区域和用户全局区域(UGA)组成。当终止与之关联的服务器或后台进程时,将释放PGA。
PGA_AGGREGATE_TARGET只是一个目标值,无法严格限制使用大小,可通过v$pgastat查看,over_allocation_count值。如果pga值设置太小,如果超过pga内存,每个进程会分配更多的内存,就是pga的消耗反而会增加。
共享服务器
多个客户端用户共享服务器进程。UGA被移入大型池,而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):此区域用于合并从多个位图索引的扫描中检索到的数据
2.3 后台进程(Background processes)
后台进程是数据库实例的⼀部分,它执⾏操作数据库和使多个⽤户的性能⼤化 所需的维护任务。每个后台进程执⾏⼀个独特的任务,但与其他进程⼀起⼯作。启动 数据库实例时,Oracle数据库会⾃动创建后台进程。存在的后台进程取决于数据库中 正在使⽤的功能。启动数据库实例时,必要的后台进程将⾃动启动。您可以根据需要 稍后启动可选的后台进程。
必要的后台进程包括进程监控进程 (PMON),进程管理器进 程 (PMAN),监听器注册进程 (LREG),系统监控进程 (SMON),数据库写进程 (DBWn),检查点进程 (CKPT),可管理性监控进程 (MMON),可管理性监控器精简进 程 (MMNL),恢复程序进程 (RECO) 和⽇志写进程 (LGWR)。
可选的后台进程特定于任务或功能。⼀些常⻅的可选过程包括归档进程 (ARCn),作业队列协调进程 (CJQ0),恢复写⼊进程 (RVWR),闪回数据存档进程 (FBDA) 和空间管理协调进程 (SMCO)。
从属进程是代表其他进程执⾏⼯作的后台进程。例如,分派进程 (Dnnn) 和共享 服务器进程 (Snnn)。
1)进程监控进程 (PMON)
PMON作为操作系统进程运行,定期扫描所有进程以查找任何异常死亡的进程。 然后,PMON负责协调由清理主进程 (CLMN) 和清理从属进程 (CLnn) 执 ⾏的清理。
2)进程管理进程 (PMAN)
PMAN作为操作系统进程运行,可根据需要监视,产⽣和停⽌以下各项:
- 分派器和共享服务器进程
- 数据库驻留连接池的连接代理和池化服务器进程
- 作业队列流程
- 可重启后台程序
3) 监听器注册进程 (LREG)
LREG可以作为线程或操作系统进程运⾏,⽤于将实例,服务,处理程序和端点 通知给监听器。
4) 系统监控进程 (SMON)
SMON对后台活动期间引发的内部和外部错误可迅速恢复。SMON可以作为线程或操作系统进程运⾏。在Oracle Real Application Clusters (RAC) 数据库中,⼀个实例的SMON进程可以对失败的其他实例执⾏实例恢复。执⾏许多数据库维护任务,其中包括:
- 创建和管理临时表空间元数据,并回收孤⽴的临时段使⽤的空间
- 通过基于Undo表空间使⽤情况统计信息来对undo段进⾏上线,下线和收缩来 维护undo表空间
- 处于暂时和不⼀致状态时清理数据字典
- 维护系统更改号(SCN)到时间的映射表,⽤于⽀持Oracle闪回功能
5) 数据库写⼊进程 (DBWn)
主要将数据块写⼊磁盘。它还处理检查点,⽂件打开同步,以及记录块写⼊记录。配置闪存后,DBWn还将写⼊数据库智能闪存 (闪存) 缓冲区。
DBWn写⼊的块分散在整个磁盘上,因此,写操作往往⽐⽇志写 程序 (LGWR) 执⾏的顺序写要慢.
DB_WRITER_PROCESSES初始化参数指定数据库写⼊进程的数量。可能有1到 100个数据库写⼊进程。前36个数据库写⼊进程的名称为DBW0-DBW9和DBWaDBWz。第37⾄第100个数据库写⼊器进程的名称是BW36-BW99。数据库为DB_WRITER_PROCESSES参数选择适当的默认设置,或者根据CPU和处理器组的数量来调整⽤户指定的设置。
6) 检查点进程 (CKPT)
该进程在特定时间通过向数据库写⼊进程 (DBWn) 传递消息来启动检查点请求,以开始写⼊脏缓冲区。完成单个检查点请求后,CKPT会更新数据⽂件头和控制⽂件以记录新的检查点。
CKPT每三秒钟检查⼀次,以查看内存量是否超过了PGA_AGGREGATE_LIMIT初 始化参数的值,如果是,则采取措施。
7) 可管理性监视进程 (MMON)和可管理性监视精简进程 (MMNL)
可管理性监视进程 (MMON) 和可管理性监视精简进程 (MMNL) 是后台进程,它们执⾏与⾃动⼯作负载存储库 (AWR) 相关的任务。
MMON从SGA收集各种内存统计信息,对其进⾏过滤,然后每60分钟在⾃动⼯ 作负载存储库 (AWR) 中创建这些统计信息的快照。
MMNL收集 session统计信息(例如⽤户ID,状态,主机以及它正在执⾏的SQL), 并将其存储在活动会话历史记录 (ASH) 缓冲区中。具体地说,MMNL每秒在SGA中对V$SESSION和V$SESSION_WAIT视图进⾏采样,然后将该数据记录在V$ACTIVE_SESSION_HISTORY视图中。
8) 恢复进程(RECO)
该进程是在具有分布式选项时所使用的一个进程,自动地解决在分布式事务中的故障。
9) ⽇志写⼊进程 (LGWR)
可将重做⽇志条⽬顺序写⼊重做⽇志⽂件,重做⽇志条⽬在系统全局区域 (SGA) 的重做⽇志缓冲区中⽣成。
重做传输从属进程(TT00-zz)将⽇志从当前的联机和备⽤重做⽇志发送到配置为异步 (ASYNC) ⽇志传输的远程备⽤⽬的地。
10) 归档进程 (ARCn)
ARCn可以作为线程或操作系统进程运⾏
仅当数据库处于ARCHIVELOG模式并启⽤⾃动归档时才存在,在这种情况下ARCn会⾃动归档联机重做⽇志⽂件。
LOG_ARCHIVE_MAX_PROCESSES初始化参数指定数据库初调⽤的ARCn进 程数
11) 作业队列协调进程 (CJQ0)
CJQ0和Jnnn都可以作为线程或操作系统进程运⾏。
它从数据字典中选择需要运⾏的作业,并⽣成作业队列从属进程 (Jnnn) 来运⾏这些作业。 Oracle Scheduler会根据需要⾃动启动和停⽌CJQ0。 JOB_QUEUE_PROCESSES初始化参数指定可以为执⾏作业创建的⼤进程数。 CJQ0仅启动要运⾏的作业数量和可⽤资源所需数量的作业队 列进程。
作业队列从属进程 (Jnnn) 执⾏作业协调分配的作业。选择作业进⾏处理时,作业从属进程将执⾏以下操作:
- 收集运⾏作业所需的所有元数据,例如:程序参数和权限信息
- 以作业的所有者身份启动数据库会话,启动事务,然后开始执⾏作业
- 作业完成后,从属进程将提交并结束事务
- 关闭会话。
完成⼯作后,从属进程将执⾏以下操作:
- 重新安排作业(如果需要)
- 更新作业表中的状态以反映作业是否已完成或计划再次运⾏
- 在作业⽇志表中插⼊⼀个条⽬
- 更新运⾏计数,并在必要时更新失败和重试计数
- 清理
- 寻找新⼯作(如果没有,则休眠)
12) 恢复写⼊进程 (RVWR)
⽤于闪回整个数据库,可以作为线程或操作系统进程运⾏
13) 闪回数据归档进程 (FBDA)
FBDA可以作为线程或操作系统进程运⾏,提供了在表的整个⽣命周期内跟踪和存储表中事务性更改的功能。 这样,您可以及时向后闪回表,以恢复表的状态。
提交修改跟踪表的事务时,FBDA会检查是否正在⽣成新的Undo,过滤与标记为存档的对象相关的内容,并将Undo信息复制到闪回数据存档表空间中。 FBDA维护当 前⾏上的元数据,并跟踪已存档的数据量。
FBDA还负责⾃动管理闪回数据存档的空间,组织(分区表空间)和保留时间。 FBDA还跟踪已跟踪交易的归档进度。
14) 空间管理协调进程 (SMCO)
SMCO和Wnnn都可以作为线程或操作系统进程运,SMCO⽤于调度各种空间管理任务的执⾏,包括主动空间分配和空间回收。 SMCO动态产⽣空间管理从属进程 (Wnnn) 来实 现这些任务。
- Wnnn进程是由SMCO动态⽣成的从属进程,⽤于在后台执⾏空间管理任务。 这些任务包括根据空间使⽤量增⻓分析将空间预分配到本地管理的表空间和 SecureFiles段中,以及从删除的段中回收空间。这些任务还包括快速摄取延迟插⼊。启动后,从属进程将充当⾃治代理。完成任务执⾏后,它将⾃动从队列 中拾取另⼀个任务。该进程在⻓时间闲置后会⾃⾏终⽌。
- Wnnn进程填充并重新填充启⽤In-Memory功能的对象。内存中协调进程 (IMCO) 会启动后台填充和重新填充柱状数据。 IMCO后台进程和前台进程将 利⽤Wnnn从属进程进⾏填充和再填充。 IMCO使⽤Wnnn进程预填充优先级为 LOW/MEDIUM/HIGH/CRITICAL的启⽤In-Memory的对象,并重新填充InMemory的对象。 Wnnn从属进程上运⾏的内存填充和重新填充任务也从前台进程启动,以响应引⽤了启⽤In-Memory对象的查询和DML操作。
15) 分派进程 (Dnnn) 和 共享服务器进程 (Snnn)
Snnn和Dnnn都可以作为线程或操作系统进程运⾏,在共享服务器体系结构中,客户端连接到分派进程 (Dnnn),该进程为每个连接创建虚电路。 当客户端将数据发送到服务器时,分派进程将数据接收到虚电路中,并将活动电路放置在公共队列中,以由空闲的共享服务器进程 (Snnn) 进⾏处理。 然后, Snnn从虚电路读取数据并执⾏完成请求所需的数据库⼯作。 当Snnn必须将数据发送到客户端时,Snnn将数据写回到虚电路中,⽽Dnnn会将数据发送到客户端。 Snnn完成客户端请求后,它将虚电路释放回Dnnn,并可以⾃由处理其他客户端。
2.4 数据⽂件(Database Data Files)
CDB根容器名为CDB $ ROOT,包含多个数据⽂件,控制⽂件,重做⽇志⽂件, 闪回⽇志和归档的重做⽇志⽂件。数据⽂件存储与所有PDB共享的Oracle提供的元数 据和普通⽤户(每个容器中已知的⽤户)。
数据库分为称为表空间的逻辑存储单元,这些逻辑存储单元共同存储所有数据库 数据。每个表空间由⼀个或多个数据⽂件构成。根容器和常规PDB具有SYSTEM, SYSAUX,USERS,TEMP和UNDO表空间(在常规PDB中为可选)。种⼦PDB具有 SYSTEM,SYSAUX,TEMP和可选的UNDO表空间。
2.5 数据库系统文件(Database system files)
- 控制⽂件:存储有关数据⽂件和联机重做⽇志⽂件的元数据
- 参数文件:定义了数据库实例启动时的配置,pfile和spfile
- 重做日志文件:数据库发生改变时将更改存储到数据库中,可用于恢复
- 自动诊断存储库:11g开始有的,用于存储数据库诊断数据
- 备份文件:用于恢复
- 归档文件:用于恢复
- 密码文件:此可选⽂件使使⽤SYSDBA,SYSOPER,SYSBACKUP, SYSDG,SYSKM,SYSRAC和SYSASM⻆⾊的⽤户可以远程连接到数据库实例并 执⾏管理任务。
- 钱包:对于应⽤程序使⽤密码凭据连接到数据库的⼤规模部署,可以将此类凭 据存储在客户端Oracle钱包中。Oracle钱包是⼀个安全的软件容器,⽤于存储身份 验证和签名凭证。
- 块更改跟踪⽂件:块更改跟踪通过将更改的块记录在块更改跟踪⽂件中,从⽽ 提⾼了==增量备份==的性能
- 闪回⽇志:闪回数据库在效果上类似于常规的时间点恢复。它使您可以将数据 库⼀次恢复到近的状态。
1)⾃动诊断资料库 (ADR)
ADR 全称 (Automatic Diagnostic Repository),⽤于数据库诊断数据的系统范围的跟踪和⽇志记录中央存储库,具体包含如上图所示。
2)备份⽂件 (Backup Files)
主要分为物理备份和逻辑备份,rman备份文件又分为两种:
- 映像副本是数据⽂件,控制⽂件或存档的重做⽇志⽂件的逐位磁盘复制。
- 备份集是RMAN创建的专有格式,其中包含⼀个或多个数据⽂件,已归档的重做⽇志⽂件,控制⽂件或服务器参数⽂件中的数据。备份集中仅包括数据⽂件中⽤于存储数据的那些块。备份集也可以被压缩,加密,发送到磁带,并使⽤数据⽂件副本不可⽤的⾼级未 使⽤空间压缩。
2.6 应⽤容器(Application Containers)
应⽤程序容器是⽤户创建的可选CDB组件,⽤于存储应⽤程序PDB的数据和元数据。 CDB可以包含零个或多个应⽤程序容器。 ⼀个应⽤程序容器仅由⼀个应⽤程序 根⽬录和⼀个或多个应⽤程序PDB组成,它们插⼊CDB根⽬录中。 应⽤程序根⽬录属 于CDB根⽬录,不属于其他容器,并且存储公⽤的元数据和数据。
参考
- https://www.linuxprobe.com/interprete-oracle12-framework.html
- 《品悟性能优化》
- https://www.cnblogs.com/sandata/p/12581966.html
- https://docs.oracle.com/en/database/oracle/oracle-database/21/cncpt/CDBs-and-PDBs.html#GUID-FC2EB562-ED31-49EF-8707-C766B6FE66B8
- https://www.cnblogs.com/jimeper/archive/2008/03/30/1129431.html