Oracle DB服务器体系结构

发布时间 2023-05-07 14:19:01作者: 耀阳居士

一、Oracle DB服务器体系结构概览。

 

 

Oracle DB 服务器体系结构包含以下三种主要结构:内存结构、进程结构和存储结构。
基本的 Oracle DB 系统由 Oracle DB 和数据库实例组成。
数据库包括物理结构和逻辑结构。由于物理结构和逻辑结构是分开的,因此管理数据的物理存储时不会影响对逻辑存储结构的访问。
实例由与该实例关联的内存结构和后台进程构成。每当启动一个实例时,都会分配一个称为系统全局区 (SGA) 的共享内存区,并启动后台进程。进程是在计算机的内存中运行的作业。进程被定义为操作系统中可运行一系列步骤的“控制线程”或机制。启动数据库实例后,Oracle 软件会将该实例与特定数据库相关联。该操作称为“装载数据库”。之后用户可以打开数据库,即授权用户可以对其进行访问。
注:Oracle 自动存储管理 (ASM) 在管理内存和进程组件时使用实例概念,不与特定数据库关联。

访问数据库用户并不是数据库用户, 是某一个用户下面acount表。

 

 

连接:用户进程和实例之间的通信。

会话:用户通过用户进程与实例之间建立的特定连接。

 

 

会话中包含很多事务,事物的状态是commit、rollback。

 

1.Oracle内存结构

Oracle DB 创建并使用内存结构来满足多种需要。例如,使用内存来存储正在运行的程序代码、在各用户之间共享的数据以及所连接的每个用户的专用数据区域。

一个实例有两个关联的基本内存结构:

 

 

程序全局区 (PGA) :包含某个服务器进程或后台进程的数据及控制信息的内存区域。PGA 是 Oracle DB 在服务器进程或后台进程启动时创建的非共享内存。服务器进程对PGA 的访问是独占式的。每个服务器进程和后台进程都具有自己的 PGA。

 

 

 PGA主要用于存放会话连接信息,排序操作(order by)帮助数据库减轻处理SQL的压力。

 

系统全局区 (SGA) :一组共享的内存结构(称为 SGA 组件),其中包含一个 Oracle DB 实例的数据和控制信息。SGA 由所有服务器进程和后台进程共享。SGA 中存储的数据有高速缓存的数据块和共享 SQL 区域等。

SGA 是包含实例数据和控制信息的内存区。SGA 包含以下数据结构:

(1)共享池:用于缓存可在用户间共享的各种构造

(2)数据库缓冲区高速缓存:用于缓存从数据库中检索到的数据块

KEEP  缓冲区池:一种专用数据库缓冲区高速缓存,用于长时间在内存中保留数据块

RECYCLE  缓冲区池:一种专用数据库缓冲区高速缓存,用于从内存中快速回收或删除数据块

nK  缓冲区高速缓存:多种专用数据库缓冲区高速缓存中的一种,用于存放大小不同于默认数据库块大小的数据块

(3)重做日志缓冲区:重做信息(用于实例恢复)在写入磁盘中存储的物理重做日志文件之前,将缓存在此处

(4)大型池:可选区域,用于为某些大型进程(例如 Oracle 备份和恢复操作)和 I/O 服务

器进程提供大型内存分配

(5)Java  池:用于存储 Java 虚拟机 (JVM) 中特定于会话的所有 Java 代码和数据

(6)流池:供 Oracle Streams 用来存储捕获和应用操作所需的信息

 

共享池、数据高速缓冲区和日志缓冲区相对来说最为重要,下面我们详细了解下

 

 

(1)共享池(Shared pool)

 

 

共享池可以校验和执行,校验成功后,生成执行计划,可以共享计划,免除CPU 内存多次响应。

处理SQL---搜索表结构(数据字典),校验语法问题。

硬解析:校验生成执行计划

软解析:相似语句,直接读取计划

同样的语句,谓词(where条件参数不同)不同,会生成同一个计划。

 

(2)数据库缓冲区高速缓存(buffer cache)

 

 

 

 

将数据文件里的数据,提到内存中(buffer cache)修改。性能提升很大

内存划分出一个区域处理 遵循LRU(最近最少使用)原则,不断地处理数据                       

采取Bucket桶和链机制,这种机制是采取空间换取效率的算法,稳定性相对较好。感兴趣的可以查看下Bucket sort算法。

 

 

(3)重做日志缓冲区(log buffer)

 

 

 

先记后写:SQL语句执行前,先写到log buffer  再写到redo.log之后再执行。

 

 

我们也可以在startup实例是看到SGA、PGA的大小。 

注:由于我们是12C以上版本,所以还有In-Memory区域

 

 

 

 

 

 

2.进程结构

用户进程:连接到Oracle DB的应用程序或工具

数据库进程

服务器进程:连接到Oracle实例,在用户建立会话时启动

后台进程:在启动Oracle实例时启动

守护程序/应用程序进程

         网络监听程序

         Grid infrastructure守护进程

 

 

 

非 RAC、非 ASM 环境中的常见后台进程包括:

数据库写进程 (DBWn)

日志写进程 (LGWR)

检查点进程 (CKPT)

系统监视器进程 (SMON)

进程监视器进程 (PMON)

恢复器进程 (RECO)

作业队列协调程序 (CJQ0)

作业从属进程 (Jnnn)

归档进程 (ARCn)

队列监视器进程 (QMNn)

 

有些后台进程是在启动实例时自动创建的,而另外一些则是根据需要创建的。其它进程结构不是特定于单个数据库的,而是可以在同一个服务器上的多个数据库间共享的。Grid Infrastructure 进程和网络进程即属于此类。

更高级的架构配置(如 RAC)中会有其它后台进程。有关后台进程的详细信息,请参见V$BGPROCESS 视图。

Linux 和 UNIX 系统上的 Oracle Grid Infrastructure 进程包括:

ohasd:Oracle 高可用性服务守护程序,负责启动 Oracle Clusterware 进程

ocssd:集群同步服务守护程序

diskmon:磁盘监视守护程序,负责监视 HP Oracle Exadata Storage Server 的输入和输出

cssdagent:启动、停止和检查 CSS 守护程序 ocssd 的状态

oraagent:扩展集群件以支持 Oracle 特有的要求和复杂资源

orarootagent:一种专用的 Oracle 代理进程,可帮助管理 root 用户所拥有的资源(如网络)

 

下面详细了解下几个比较重要的进程

(1)数据库写进程(DBWn)

 

 

DBWn  n可以多个A-J,0-9

增删改查都是在buffer cache

灰数据=脏数据 内存和文件数据不一致    DBWn触发后,写入数据中

 

 注:不是commit后就会立即修改数据文件

 

(2)日志写进程(LGWR)

 

 

 

LGWR是非常繁忙的进程

Log buffer挂起,数据库实例就会变为hung状态。redo文件过小、归档空间爆满也会导致数据库实例挂起状态。

 

(3)检查点进程(CKPT)

存盘  SCN号

触发DBWn,更新控制文件和数据文件的头部信息  

 

 

   

(4)SMON进程:系统监视进程

(5)PMON进程:进城监控进程。帮助重建进程、释放锁、没commit的rollback回去。

(6)归档进程(ARCn)

 

 

 redo.log文件写满后,非归档模式下再次写入覆盖之前内容,归档模式下先落盘到归档文件完成后,再次写入覆盖之前内容。

完全备份+归档=当前状态或某个中间状态

 

3.数据库存储体系结构

 

 控制文件ctl,数据文件dbf,日志文件log,备份文件dmp,参数文件pfile(init+实例名.ora)/spfile(spfile+实例名.ora),口令文件(orapw+实例名)

 

逻辑和物理数据库结构

 

 

数据库database----------------------------------------------------类似计算机

表空间Tablespace-------------------数据文件(dbf)--------类似CDE分区

段Segment--------table,view等等

区Extend

数据块Block (常规大小8K,大小和字符集设定好不能修改) 

(操作系统块大小不定,根据版本而定)

 

 

 

 

 

SYSTEM 表空间用于核心功能(例如数据字典表)。

•辅助的 SYSAUX 表空间用于附加的数据库组件(如 Oracle Enterprise Manager Repository)。

•不建议使用 SYSTEM 和 SYSAUX 表空间来存储应用程序的数据。

 

 

 

 

与 Oracle DB  交互

以下示例在最基本的层面上描述了 Oracle DB 的操作。在该示例展示的 Oracle DB 配置中,用户和关联服务器进程在不同计算机上运行,这些计算机通过网络连接。

1. 在安装了 Oracle DB 的节点(通常称为“主机”或“数据库服务器”)上启动了一个实例。

2. 用户启动一个应用程序,从而衍生了一个用户进程。该应用程序尝试与服务器建立一个连接。(此连接可以是本地连接、客户机/服务器连接或来自中间层的三层连接)。

3. 服务器运行一个具有相应 Oracle Net 服务处理程序的监听程序。监听程序检测到应用程序发出的连接请求,并创建一个代表用户进程的专用服务器进程。

4. 用户运行一条 DML 类型的 SQL 语句并提交事务处理。例如,用户更改表中的客户地址并提交更改。

5. 服务器进程接收该语句,并检查共享池(一个 SGA 组件)中是否有包含相同 SQL语句的共享 SQL 区域。如果找到共享 SQL 区域,服务器进程将检查用户对于所请求数据的访问权限,然后使用现有的共享 SQL 区域处理该语句。如果未找到共享 SQL区域,则为该语句分配一个新的共享 SQL 区域,以便对该语句进行语法分析和处理。

6. 服务器进程从实际数据文件(表)或数据库缓冲区高速缓存中存储的值中检索任何必需的数据值。

7. 服务器进程修改 SGA 中的数据。因为已提交事务处理,所以日志写进程 (LGWR) 会立即在重做日志文件中记录该事务处理。数据库写进程 (DBWn) 在一个高效的时机将修改后的块永久写入磁盘。

8. 如果事务处理成功,服务器进程将通过网络向应用程序发送一条消息。如果事务处理不成功,则传送一条错误消息。

9. 在整个过程中,其它后台进程也在运行,监视是否有需要干预的情况。此外,数据库服务器管理其他用户的事务处理,并防止请求相同数据的事务处理之间发生争用。

 

select * from dba_data_files;

 

 

 二、Oracle启停过程

 

 

1.umont状态   start nomount

开启内存和进程

$ORACLE_HOME/dbs目录下找参数文件,找不到参数文件,实例不能开启。

 

 

2.mount阶段   找控制文件,找到下列文件挂载上再开到open状态

 

 

3.open阶段----实例恢复阶段  校验数据文件是否一致

 

 

 

 

I  实现一致性关库  未提交的事务,rollback。   使用的最多的

A  类似于power off 导致我们数据不一致。但是开库时校验数据一致性时,数据文件会去找redo,恢复到数据一致。 

 

select status from v$instance; --查看实例状态

 

 

用于管理 Oracle DB  的工具

• Oracle Universal Installer

• Database Configuration Assistant       ---- DBCA

• Database Upgrade Assistant                    ---- DBUA

• Oracle Net Manager                                                 监听管理器

• Oracle Net Configuration Assistant                    ----- NETCA

• Oracle Enterprise Manager                          -----EM管理工具

• Server Control 实用程序                            ---- 资源注册---RAC

• SQL*Plus

• Recovery Manager                                                  ---- Rman

• 数据泵                                                                ---- expdp、impdp

• SQL*Loader

 

 

 

 

用于访问实例内存结构不断变化的状态信息

 

 

 

 

 

 

 

 

此处只是概览,有机会我们详细了解下数据字典