前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【云原生进阶之数据库技术】第二章-Oracle-原理-4.1-Oracle整体架构

【云原生进阶之数据库技术】第二章-Oracle-原理-4.1-Oracle整体架构

作者头像
江中散人_Jun
发布2024-05-31 12:39:58
1370
发布2024-05-31 12:39:58
举报
文章被收录于专栏:云原生布道专栏

1 Oracle数据库的体系结构

1.1 综述

与其他RDBMS软件一样,Oracle数据库是建立在SQL之上的,SQL是一种标准化的编程语言,数据库管理员、数据分析师和其他IT专业人员使用它来管理数据库并查询存储在其中的数据。Oracle软件与PL/SQL绑定,PL/SQL是Oracle开发的一种实现,它为标准SQL添加了一组专有的编程扩展,这是RDBMS供应商的常见做法。Oracle数据库还支持用Java编程,用PL/SQL或Java编写的程序可以从其他语言调用。

1.1.1 Oracle数据库的核心组件

此外,与其他关系数据库技术一样,Oracle数据库利用行和列表结构,将不同表中的相关数据元素相互连接;因此,用户不必将相同的数据存储在多个表中以满足处理需求。关系模型还提供了一组完整性约束,以保持数据的准确性;这些检查是对原子性、一致性、隔离性和持久性原则(称为ACID属性)的更广泛遵守的一部分,旨在确保数据库事务得到可靠处理。

从体系结构的角度来看,Oracle数据库服务器包括用于存储数据的数据库和用于管理数据库中包含的文件的一个或多个数据库实例。数据库混合了物理和逻辑存储结构。物理存储结构包括数据文件、包含数据库元数据的控制文件以及记录数据更改的在线重做日志文件。逻辑存储结构包括数据块;区段,其将逻辑上连续的数据块分组在一起;线段,它们是范围的集合;以及充当段的逻辑容器的表空间。

Oracle数据库实例是围绕一组缓存构建的,称为系统全局区域(SGA),其中包含共享内存池;实例还包括在后台运行的进程,这些进程管理I/O功能并监视数据库操作以优化性能和可靠性。独立的客户端进程为连接到实例的用户运行应用程序代码,而服务器进程管理客户端进程和数据库之间的交互。每个服务器进程都被分配了一个称为程序全局区域的专用内存区域,与SGA分离。

1.1.2 关键数据库功能和选项

Oracle数据库包括一长串不同功能类别的标准功能、附加选项和管理包,包括高可用性、可扩展性、性能、安全性和分析。除了Oracle Multitender、Oracle Database In Memory和RAC之外,Enterprise Edition中一些值得注意的额外项目还包括用于自动工作负载管理、数据库生命周期管理、性能调整、在线分析处理(OLAP)、分区、数据压缩以及空间和图形数据管理的模块,想要进一步学习可以了解一下即将开展的数据库管理与调优培训班。

​ Oracle Advanced Analytics选项支持数据库内SQL查询和开源R算法,用于更广泛的分析处理。高可用性功能包括应用程序连续性和自动块修复工具,以及Data Guard和Active Data Guard,它们提供了一套用于创建备份数据库的服务,以提供灾难恢复功能并防止数据损坏。

存储在Oracle数据库中的数据可以加密以确保数据安全,标准版和企业版都支持网络加密和强身份验证。许多其他安全功能在Enterprise Edition中作为附加功能提供。例如,Oracle Key Vault软件将所有加密密钥保存在一个位置,以便更容易地解密数据。使用Oracle Advanced Security,数据可以透明地加密和编辑,从而可以与其他用户共享数据,而不会让他们看到不应该访问的机密信息。

Oracle数据屏蔽和子集包使数据在用于开发和测试时能够进一步加密或以其他方式屏蔽,Oracle标签安全性帮助数据库管理员(DBA)确定谁可以查看哪些数据的界限;它通过为单独的数据行分配分类或标签,然后允许用户只查看与其标签授权匹配的行,从而实现细粒度的访问控制。

Oracle Database Enterprise Edition还具有可用的安全功能,可以帮助DBA首先确定谁可以访问数据,例如Oracle Database Vault,它可以防止用户访问他们无权查看的数据。Oracle Database Vault还进行权限分析,因此用户可以获得有效完成工作所需的最低访问级别。Oracle Audit Vault和数据库防火墙支持基于策略的数据访问审核,以监控使用情况;它还监视SQL活动并防止未经授权的SQL流量到达数据库。

1.2 OracleDB构成

一般我们所说的Oracle指的是Oracle RDBMS(Relational databases Management system),一套Oracle数据库管理系统,也称之为Oracle Server。而Oracle Server主要有两大部分:

  • Oracle Server = 实例 + 数据库 (Instance和Database是相互独立的)
  • 数据库 = 数据文件 + 控制文件 +日志文件
  • 实例 = 内存池 + 后台进程

所以可以细分为: Oracle Server = 内存池 + 后台进程 + 数据文件 + 控制文件 + 日志文件

Oracle DB 服务器由一个 Oracle DB 以及一个或多个数据库实例组成。实例由内存结构和后台进程构成。每当启动一个实例时,都会分配一个称为系统全局区 (SGA) 的共享内存区,并启动后台进程。

一台Oracle Server支持创建多个Database,而且每个Datacase是互相隔离而独立的。不同的Database拥有属于自己的全套相关文件,例如:有各自的密码文件,参数文件,数据文件,控制文件和日志文件。

Database由一些物理文件(如:存放在存储设备中的二维表文件)组成。二维表存储在Database中,但Database的内容不能被用户直接读取,用户必须通过Oracle instance才能够访问Database,一个Instance只能连接一个Database,但是一个Database可以被多个Instance连接。

​ Oracle 实例使用内存结构和进程来管理和访问数据库。所有内存结构都存在于构成数据库服务器的那些计算机的主内存中。进程是在这些计算机的内存中运行的作业。进程被定义为操作系统中可运行一系列步骤的“控制线程”或机制。

数据库包括物理结构和逻辑结构。由于物理结构和逻辑结构是分开的,因此管理数据的物理存储时不会影响对逻辑存储结构的访问。

上图分三部分组成,左侧User Process、Server Process、PGA可以看做成Clinet端,上面的实例(Instance)和下面的数据库(Database)及参数文件(parameter file)、密码文件(password file)和归档日志文件(archived logfiles)组成Oracle Server,所以整个示图可以理解成一个C/S架构。 Oracle Server由两个实体组成:实例(instance)与数据库(database)。这两个实体是独立的,不过连接在一起。在数据库创建过程中,实例首先被创建,然后才创建数据库。在典型的单实例环境中,实例与数据库的关系是一对一的,一个实例连接一个数据库,实例与数据库也可以是多对一的关系,即不同计算机上的多个实例打开共享磁盘系统上的一个公用数据库。这种多对一关系被称为实际应用群集(Real Application Clusters,RAC)RAC极大提高了数据库的性能、容错与可伸缩性(可能耗费更多的存储空间)并且是oracle网格(grid)概念的必备部分。

将上面的Oracle RDBMS架构图进行抽象分类,可以将Oracle架构抽象为:Oracle体系 = 内存结构 + 进程结构 + 存储结构

1.2.1 Oracle服务器

Oracle服务器,所谓Oracle服务器是一个数据库管理系统,它包括一个Oracle实例(动态)和一个Oracle数据库(静态)。Oracle实例是一个运行的概念(如操作系统的进程),提供了一种访问Oracle数据库的方式,始终打开一个,并且只能打开一个Oracle数据库,Oracle实例有SGA和一些后台服务进程组成。在后台服务进程当中,DBWn PMON CKPT LGWR SMON是必备的后台进程,而ad queue、rac、shared server、ad replication则是可选的,之所以可选,它们是因为离开它Oracle也能正常运行,要么是一些高级的功能才可以用得到。

​ Oracle数据库是一个被统一处理的的数据的集合,从物理角度来看包括三类文件数据文件,控制文件,重做日志文件。从逻辑角度来看,Oracle数据库至少包含一个表空间,表空间至少包含一个段,段由区做成,区有块组成。需要注意的是表空间可以包含若干个数据文件,段可以跨同一个表空间的多个数据文件,区只能在同一个数据文件内。

Oracle还设计了其他的关键文件用来为整个系统服务,如配置文件、密码文件、归档日志文件,还有还有用户进程和服务进程,现在可以简单理解下执行SQL语句就要用到这2个进程。

1.2.2 数据库实例

数据库实例指数据库服务器的内存及相关处理程序,它是Oracle的心脏。与Oracle性能关系最大的是SGA(System Global Area,即系统全局区活共享内存区),SGA包含三个部分:

1、数据缓冲区,可避免重复读取常用的数据;

2、日志缓冲区,提升了数据增删改的速度,减少磁盘的读写而加快速度;

3、共享池,使相同的SQL语句不再编译,提升了SQL的执行速度。

Oracle数据库实例的另一部分就是一些后台进程了,他主要包括:

  1. 系统监控进程
  2. 进程监控
  3. 数据库写进程
  4. 日志写进程
  5. 检验点进程
  6. 其他进程

这些后台进程合起来完成数据库管理任务。在访问数据库的时候,必须先启动实例,实例启动时先分配内存区,然后再启动后台进程,后台进程执行库数据的输入、输出以及监控其它Oracle进程。在数据库启动过程中有五个进程是必须启动的,它们是系统监控进程(SMON)、进程监控(PMON)、数据库写进程(DBWR)、日志写进程(LGWR)、检验点进程(CKPT),否则实例无法创建。

注意:在启动oracle数据库的时候。因为有些进程是在开机启动项中自动启动的。所以占用了很大一部分内存。如果您电脑上还有一些其他占用内存比较大的程序。在启动oracle数据库的时候有可能会因内存不足而启动失败。

1.3 Oracle数据库逻辑结构

Oracle的逻辑结构是一种层次结构。主要由:表空间、段、区和数据块等概念组成。逻辑结构是面向用户的,用户使用Oracle开发应用程序使用的就是逻辑结构。数据库存储层次结构及其构成关系,结构对象也从数据块到表空间形成了不同层次的粒度关系。

​(1)数据文件(Data Files)

数据文件是Oracle数据库中存储数据的基本单位。每个数据文件都对应于操作系统中的一个物理文件,可以位于磁盘、阵列或其他存储介质上。数据文件是以固定大小的块(Block)为单位进行管理的。

(2)表空间(Tablespaces)

表空间是一个逻辑存储结构,用于组织和管理数据文件。一个数据库可以包含多个表空间,每个表空间包含一个或多个数据文件。表空间可以由DBA(数据库管理员)创建和管理,它定义了数据文件的分配和增长方式。

Oracle数据库中有四种类型的表空间:系统表空间、用户表空间、临时表空间和回滚表空间。系统表空间用于存储数据库的元数据,用户表空间用于存储用户数据,临时表空间用于存储临时数据(如排序和临时表),回滚表空间用于存储事务回滚数据。

(3)段(Segments)

段是逻辑结构中更高层次的组织单位,用于存储和管理数据。一个表或索引在磁盘上对应一个或多个段。根据对象的类型不同,可以有表段、索引段、分区段等。

表段包含了表的数据行,索引段包含了索引的键值和指向表的指针。分区段是指将表或索引分割为多个部分,每个部分独立存储在不同的段中,以提高查询效率和管理灵活性。

(4)盘区(Extents)

盘区是段的存储单元,它是由一个或多个连续的数据块组成的。在Oracle数据库中,块是最小的物理读写单位,一般为8KB或16KB大小。盘区的大小取决于段的大小、空间使用情况以及数据库的配置参数。

当段需要存储更多数据时,Oracle会自动分配新的盘区。如果一个盘区不足以容纳一个逻辑块,则会分配多个相邻的盘区。当段中的数据被删除或移动时,相应的盘区会被释放出来供其他对象使用。

(5)块(Blocks)

块是Oracle数据库中最基本的存储单位。它是数据文件中的连续数据单元,用于存储和检索数据。每个块由一组字节组成,包括数据、元数据和用于管理块的控制信息。

在一个块中,可以存储一个或多个表或索引的数据行。块的大小在创建数据库时确定(默认大小为8K)并且在整个数据库中保持一致。较小的块大小可以提高存储效率,但也会增加管理开销。较大的块大小可以提高IO性能,但会浪费存储空间。

1.4 Oracle数据库物理结构

​ Oracle物理结构由控制文件、数据文件、重做日志文件、参数文件、归档文件、口令文件组成

一个数据库中的数据存储在磁盘上物理文件,被使用时,调入内存。其中控制文件、数据文件、重做日志文件、跟踪文件及警告日志(trace files、alert files)属于数据库文件;参数文件(parameter file)口令文件(password file)是非数据库文件。

  • 数据文件:存储数据的文件.数据文件典型地代表了根据他们使用的磁盘空间和数量所决定的一个Oracle数据库的容积。

于此我们需要知道的是,一个数据库中的数据是存储在磁盘上的物理文件,被使用时才被调入内存中的。其中控制文件、数据文件、重做日志文件、跟踪文件、警告文件属于数据库文件。参数文件、口令文件属于非数据库文件。

  • 控制文件:包含维护和验证数据库完整性的必要信息、例如,控制文件用于识别数据文件和重做日志文件,一个数据库至少需要一个控制文件。控制文件内容有:
    • 数据库名
    • 表空间信息
    • 所有数据文件的名字和位置
    • 所有redo日志文件的名字和位置
    • 当前的日志序列号
    • 检查点信息
    • 关于redo日志和归档的当前状态信息

控制文件的使用过程是控制文件把Oracle引导到数据库文件的其它部分。启动一个实例时,Oracle从参数文件中读取控制文件的名字和位置。安装数据库时,Oracle打开控制文件。最终打开数据库时,Oracle从控制文件中读取数据文件的列表并打开其中的每个文件。

  • 重做日志文件,含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复。一个数据库至少需要两个重做日志文件。
  • 跟踪文件及警告日志(Trace Files and Alert Files),
    • 跟踪文件是在instance 中运行的每一个后台进程都有一个跟踪文件(trace file)与之相连。Trace file记载后台进程所遇到的重大事件的信息。
    • 警告日志( Alert Log)是一种特殊的跟踪文件,每个数据库都有一个跟踪文件,同步记载数据库的消息和错误。
  • 参数文件:包括大量影响Oracle数据库实例功能的设定,如以下设定:
    • 数据库控制文件的定位
    • Oracle用来缓存从磁盘上读取的数据的内存数量
    • 默认的优化程序的选择

和数据库文件相关,执行两个重要的功能,为数据库指出控制文件和为数据库指出归档日志的目标。

  • 归档文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。
  • 口令文件:认证哪些用户有权限启动和关闭Oracle例程.

1.5 内存结构

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)。

1.6 后台进程架构

Oracle DB 系统中的进程主要分为两组:

1、运行应用程序或 Oracle 工具代码的用户进程

对于不同的 Oracle DB 配置,用户进程结构有所不同,具体取决于操作系统和选择的 OracleDB 选件。已连接用户的代码可以配置为专用服务器或共享服务器。

• 专用服务器: 对于每个用户,运行数据库应用程序的用户进程都由执行 Oracle DB 服务器代码的专用服务器进程提供服务。

• 共享服务器: 不必为每个连接都提供一个专用服务器进程。分派程序将多个传入网络会话请求引到共享服务器进程池。共享服务器进程为所有客户机请求提供服务。

2、运行 Oracle DB 服务器代码的 Oracle DB 进程(包括服务器进程和后台进程)

1.6.1 服务器进程

Oracle DB 创建服务器进程以处理连接到实例的用户进程的请求。用户进程代表连接到Oracle DB 的应用程序或工具。它可以与 Oracle DB 在同一台计算机上,也可以在远程客户机上利用网络来访问 Oracle DB。用户进程首先与一个监听程序进程通信,在专用环境中该进程会创建一个服务器进程。

所创建的代表每个用户的应用程序的服务器进程可以执行以下一项或多项操作:

• 对通过应用程序发出的 SQL 语句进行语法分析并运行语句

• 从磁盘上的数据文件中将必要的数据块读取到 SGA 的共享数据库缓冲区中(如果这些数据块目前尚未在 SGA 中)

• 返回结果,使应用程序可以处理信息

1.6.2 后台进程

为了最大限度地提高性能并满足多个用户的需要,多进程 Oracle DB 系统使用一些称为“后台进程”的附加 Oracle DB 进程。一个 Oracle DB 实例可以有多个后台进程。

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

  • 数据库写进程 (DBWn):负责将更改的数据从数据库缓冲区高速缓存写入数据文件
  • 日志写进程 (LGWR):将重做日志缓冲区中的更改写入在线重做日志文件
  • 检查点进程 (CKPT):负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。该进程在检查点出现时,对全部数据文件的标题进行修改,指示该检查点。在通常的情况下,该任务由LGWR执行。然而,如果检查点明显地降低系统性能时,可使CKPT进程运行,将原来由LGWR进程执行的检查点的工作分离出来,由CKPT进程实现。对于许多应用情况,CKPT进程是不必要的。只有当数据库有许多数据文件,LGWR在检查点时明显地降低性能才使CKPT运行。CKPT进程不将块写入磁盘,该工作是由DBWR完成的。init.ora文件中CHECKPOINT_PROCESS参数控制CKPT进程的使能或使不能。缺省时为FALSE,即为使不能。
  • 系统监视器进程 (SMON):检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复
  • 进程监视器进程 (PMON):负责在一个Oracle 进程失败时清理资源
  • 恢复器进程 (RECO)
  • 作业队列协调程序 (CJQ0)
  • 作业从属进程 (Jnnn)
  • 归档进程 (ARCn):在每次日志切换时把已满的日志组进行备份或归档
  • 队列监视器进程 (QMNn)

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

有些后台进程是在启动实例时自动创建的,而另外一些则是根据需要创建的。

其它进程结构不是特定于单个数据库的,而是可以在同一个服务器上的多个数据库间共享的。 Grid Infrastructure 进程和网络进程即属于此类。

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

  • 服务进程:用户进程服务。
  • 用户进程:在客户端,负责将用户的SQL语句传递给服务进程,并从服务器段拿回查询数据。
  • ohasd: Oracle 高可用性服务守护程序,负责启动 Oracle Clusterware 进程
  • ocssd:集群同步服务守护程序
  • diskmon:磁盘监视守护程序,负责监视 HP Oracle Exadata Storage Server 的输入和输出
  • cssdagent:启动、停止和检查 CSS 守护程序 ocssd 的状态
  • oraagent:扩展集群件以支持 Oracle 特有的要求和复杂资源
  • orarootagent:一种专用的 Oracle 代理进程,可帮助管理 root 用户所拥有的资源(如网络)

1.7 SCN(System ChangeNumber):

  • 系统改变号,一个由系统内部维护的序列号。当系统需要更新的时候自动增加,它是系统中维持数据的一致性和顺序恢复的重要标志。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 Oracle数据库的体系结构
    • 1.1 综述
      • 1.1.1 Oracle数据库的核心组件
      • 1.1.2 关键数据库功能和选项
    • 1.2 OracleDB构成
      • 1.2.1 Oracle服务器
      • 1.2.2 数据库实例
    • 1.3 Oracle数据库逻辑结构
      • 1.4 Oracle数据库物理结构
        • 1.5 内存结构
          • 1.6 后台进程架构
            • 1.6.1 服务器进程
            • 1.6.2 后台进程
          • 1.7 SCN(System ChangeNumber):
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档