首页 > 数据库 >一、Oracle DB服务器体系结构概览。

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

时间:2024-07-20 11:08:24浏览次数:20  
标签:DB 数据库 概览 进程 实例 内存 Oracle 服务器

一、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

 

 

 

 

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

 

 

 

 

 

 

 

 

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

标签:DB,数据库,概览,进程,实例,内存,Oracle,服务器
From: https://www.cnblogs.com/yaoyangding/p/18312861

相关文章

  • 如何从 Oracle 迁移到 Greenplum 第二篇
    如何从Oracle迁移到Greenplum第二篇Greenplum中文社区Greenplum中文社区2020/04/3009:00阅读数2.7K本文被收录于专区数据库进入专区参与更多专题讨论  在上周和大家分享的《如何从Oracle迁移到Greenplum第一篇》中,我们介绍了Greenplum......
  • Oracle(11)Oracle有哪些常见的数据类型?
    Oracle数据库提供了多种数据类型,用于存储不同类型的数据。以下是一些常见的Oracle数据类型,并结合代码进行详细说明:VARCHAR2:存储可变长度的字符串,最大长度为4000字节。CREATETABLEemployees(employee_idNUMBER,first_nameVARCHAR2(50),last_nameVAR......
  • Oracle(12)什么是主键(Primary Key)?
    主键(PrimaryKey)是数据库表中的一个或多个列,它们的值唯一地标识表中的每一行。主键具有以下特点:唯一性(Uniqueness):主键的每个值在表中必须是唯一的,不能重复。非空性(NotNull):主键列的值不能为空(NULL)。单一性(SingleColumnorCompositeKey):主键可以是单个列,也可以是由多个列......
  • MongoRepository 操作 AWS DocumentDB时,如何达到与MySql 中有 select … for update
    在MySQL中,SELECT...FORUPDATE用于在事务中对读取的数据行加锁,以防止其他事务同时修改这些行。这种行级锁定机制在关系型数据库中广泛使用,以确保数据一致性。在MongoDB或AWSDocumentDB中,类似的效果可以通过以下方式实现:使用FindandModify操作:MongoDB提供了f......
  • ORACLE vs MySQL 对组合索引包含IN LIST执行计划研究(ORACLE部分)_PART1
    本文主要研究下组合索引包含in条件(多个值),在单表查询,关联查询这两种SQL查询结果在ORACLE和MySQL里的区别。ORACLE具有强大的优化器,一般来说,组合索引在ORACLE里不管是单表还是关联查询,都可以选择optimal的执行计划,只要统计信息等是准确的。MySQL的优化器相对来说,要弱不少,很多功能不......
  • Oracle数据库 oracle八大性能视图
    V$SYSSTATVSYSSTAT......
  • Oracle RAC的坑应用分离
    RAC最大的坑就是内存融合,也不能说它是坑,只是在使用过程中,或者传统数据库升级到RAC上会带来巨大的性能下降。RAC从8时代的并行技术发展过来的,到了11G正式成熟稳定,一路走来都是解决高可用的问题,达到双机热备,不仅仅是热备而是双活,同时工作,同时对外服务,一个挂了,另外一个接过活来干。......
  • oracle数据库状态查询
    oracle数据库状态查询(表空间,表空间利用率,是否自动扩展,IOPS,MBPS,数据库总大小)排除了('SYSAUX','USERS','SYSTEM','UNDOTBS1')结果示例--查询用户自定义表空间的使用信息WITHuser_tablespacesAS(SELECTDISTINCTtablespace_nameFROMdba_segmentsWHERE......
  • 雷电9模拟器-ADB连接
    前言全局说明雷电9模拟器-ADB连接一、说明二、查看设备adbdevices三、adb连接adbconnect127.0.0.1:5555四、adb登录命令行adbshell有多个设备时,要用-s命令指定设备名adb-s127.0.0.1:5555shell五、获取root权限5.1设置里开启root5.2su获取ro......
  • Seata 1.3.0 Oracle 回滚测试验证 报错 ORA-02289: 序列不存在
    使用Seata1.3.0版本,测试A服务调用B服务,且A方法中,手动写了一个异常,测试是否正常回滚(Mysql已经测试过)发现报错:ORA-02289:序列不存在 一看就是undo_log这张表的sequence没有建立,导致数据保存不了,太久没有用oracle了,之前搜索undo_log的建表SQL是直接在网上搜索的,所以缺少了建seq......