一、oracle体系结构概述
前面文章讲述了oracle19C数据库的安装过程,今天跟大家分享一下oracle的体系结构。oracle是一个广泛使用的关系型数据库管理系统(RDBMS)。oracle数据库严格意义上来讲由两大部分组成:实例和数据库。实例用于管理和控制数据库,而数据库为实例提供数据。
Oracle体系结构主要用来分析数据库的组成,工作过程与原理,以及数据在数据库中的组织与管理机制。
以下是Oracle数据库的逻辑架构图:

接下来就对oracle相关概念进行展开讲解。
二、实例(instance)
实例是oracle数据库的运行环境,由在服务器中分配的共享内存区域和一系列后台进程组成。实例负责管理数据库的内存和进程,以及处理用户的请求,每个oracle都有一个实例与之对应。启动Oracle数据库服务器实际上是在服务器的内存中创建一个Oracle实例,然后用这个实例来访问和控制磁盘中的数据文件。实例是暂时的,它会随着数据库的关闭而消失。
1、程序全局区PGA
当连接到数据库实例的用户进程请求数据库时,由Oracle服务器进程负责解析并执行。在启动服务器进程时,oracle会给这个进程分配一个内存区域,即程序全局区PGA(Program Global Area)。PGA存放服务器进程的数据和控制信息,是每个用户进程的私有内存区域,不能被其他进程共享。PGA主要有以下几个部分组成:
(1)会话区(Session Area):用于保存用户会话所具有的权限、角色、性能统计信息。
(2)排序区(Sort Area) :主要用于存放排序操作所产生的临时数据。
(3)游标区(Cursor Area):用于存放执行游标操作时所产生的数据。
(4)堆栈区(Stack Area):用于保存会话过程中的绑定变量、会话变量等信息。
2、系统全局区SGA
当启动一个实例时,Oracle会分配内存区域给这个实例,即系统全局区(System Global System)。SGA存放数据和数据库实例的控制信息,是一组共享的内存结构,多个用户可以同时连接到同一个实例,共享SGA的数据。SGA主要由以下几部分组成:
(1)数据库缓存区缓存(Database Buffer Cache)
数据库缓存区用于缓存用户当前或最近使用的数据,减少磁盘I/O操作,提高数据的访问速度。数据库缓存区是Oracle用来执行sql 的工作区域,在更新数据时,用户会话不会直接去更新磁盘上的数据。当用户向数据库发出请求时(如检索某一条数据),如果在高速数据缓冲区中存在请求的数据,则Oracle系统会直接从高速数据缓冲区中读取数据并返回给用户;否则,Oracle系统会打开数据文件读取请求的数据。当高速数据缓冲区被填满时,会自动挤掉一些不常被访问的数据块。
(2)重做日志缓存区(Redo Log Buffer)
日志缓存区用于存储事务的重做日志,以实现数据的恢复和保护。重做日志缓冲区用于存储对数据库进行修改操作时所产生的日志信息,这些日志信息在写入重做日志文件中之前,首先存储到重做日志缓冲区中,然后当检查点发生或重做日志缓冲区中的信息量到达一定峰值时,由日志写入(LGWR)进程将此缓冲区的内容写入重做日志文件中。
(3)共享池(shared pool)
共享池主要用于存储解析并执行过的 SQL语句和PL/SQL 代码、频繁访问的数据字典信息和系统参数等。主要包括几个共享池组件:
1)库高速缓存区:library cache,缓存用户最近执行的SQL的执行计划和分析代码
2)数据字典缓存:dictionary cache,缓存用户最近访问的数据库对象的结构信息
3)PL/SQL区:缓存存储过程、函数、触发器等数据库对象
注意:Oracle共享池的空间并非越大越好,因为系统的内存资源是有限的,而且操作系统本身也要消耗一定的内存空间。
(4)JAVA池
JAVA池主要用于支持在数据库中运行JAVA代码。
(5)大池(Large Pool)
大池是Oracle可选的内存结构,可以分担共享池的压力,在使用RMAN备份和并行查询时会用到大池。不是必须的内存结构。
(6)流池(Stream Pool)
Oracle流池用于在数据库与数据库之间进行信息共享。如果没有用到Oracle流,就不需要设置该池。
3、后台进程
后台进程是实例启动时自动创建的一系列进程,他们负责执行各种后台任务。
(1)进程监视器PMON(Process Monitor)
监视用户进程和后台进程,重启失败的进程;当有进程启动失败时,PMON会清除失败的用户进程,释放用户进程所用的资源。
(2)系统监视器SMON(System Monitor)
系统监控(SMON)进程是在数据库系统启动时执行回复工作的强制性进程。负责数据库的恢复和一致性检查,以及清理未完成的事务。
(3)数据库恢复进程RECO(recovery Monitor)
恢复(RECO)进程是在分布式数据库模式下使用的一个可选进程,用于数据不一致时的恢复工作。
(4)检查点进程CKPT(Checkpoint Process)
负责在数据库中创建检查点,当检查点事件发生时,CKPT会要求DBWR将某些“脏”数据块回写到数据文件中。当用户进程发出数据请求时,Oracle系统从数据文件中读取需要的数据并存储到高速数据缓冲区中,用户对数据的操作是在缓冲区中进行的。
(5)数据写入器DBWR(Database Writer)
数据写入(DBWR)进程的主要任务是将数据缓存区中的“脏”数据块回写到数据文件中。所谓的“脏”数据块是指高速数据缓冲区中被修改过的数据块,这些数据块的内容与数据文件的数据块内容不一致。中被写满后接着写入另外一组中。当LGWR进程将所有的
(6)日志写入器LGWR(Log Writer)
负责将日志缓存区中的数据写到磁盘。Oracle系统首先将用户所做的修改日志信息写入日志文件中,然后再将修改结果写入数据文件中。当LGWR进程写满一个日志文件组而转向写另外一组时,称之为日志切换。
(7)归档日志 ARCH(Archiver Process)
当各个日志文件组都被写满,在即将被覆盖之前,先由ARCH把即将被覆盖的日志文件中的日志信息读出,然后再把这些“读出的日志信息”写入归档日志文件中,以便进行数据库的备份和恢复。只有当Oracle数据库处于归档模式时,该进程才可能起到作用。
三、数据库
数据库是由基于磁盘的数据文件、控制文件、日志文件、参数文件和归档日志文件等组成的物理文件集合。Oracle数据库存储结构可分为物理存储结构和逻辑存储结构。

物理存储结构
Oracle的物理结构其实就是我们在系统上看到的各种文件,最终目的就是存储和获取相关数据。这些存在硬盘上的文件组成了oracle数据库的物理结构,以下是组成物理结构的各种文件:
(1)参数文件(Parameter File)
参数文件包含了Oracle数据库的配置参数,如内存分配、并发连接数、日志文件大小等。它在数据库启动时被读取,用于初始化实例的各种参数。
(2)控制文件(Control File)
控制文件是数据库的元数据文件,它记录了数据库的结构信息、数据文件和日志文件的位置、数据库的日志序列号等。控制文件在数据库启动时被读取,用于恢复数据库的一致性。控制文件一旦受损,那实例会立马终止。控制文件所存储的路径由服务器参数文件SPFILEORCL.ORA的CONTROL_ FILES参数值来指定。每个数据库至少拥有一个控制文件,一个数据库可以同时拥有多个控制文件
(3)数据文件(Data File)
数据文件是用于保存用户应用程序数据和Oracle系统内部数据的文件,它们在操作系统中就是普通的文件,Oracle在创建表空间的同时会创建数据文件。它包含了表、索引和其他数据库对象的数据。数据文件在数据库创建时被分配,并在磁盘上存储数据块。
在读取数据时,Oracle系统首先从数据文件中读取数据,并将数据存储在内存的高速数据缓冲区中。如果用户要读取数据库中的某些数据,而请求的数据又不在内存的高速数据缓冲区中,则需要从相应的数据文件中读取数据并存储在缓冲区中。
(4)重做日志文件(Redo Log File)
重做日志文件用于记录数据库中的所有修改操作,包括数据的插入、更新和删除。在数据库恢复时,可以从该日志文件中读取原始记录。对表或者整个表空间设定NOLOGGING属性,可使基于表或表空间中的DML操作(如创建表、删除视图、修改索引等)不生成日志信息,从而减少日志信息。
(5)归档日志文件(Archived Redo Log File)
归档日志文件是已经被归档的重做日志文件,在各个日志文件都被写满而即将被覆盖之前,先由归档(ARCH)进程将即将被覆盖的日志文件中的日志信息读出,然后将其写入归档日志文件中。它们用于数据库的备份和恢复。归档日志文件可以被保存在磁盘上,以提供长期的数据保护。所以在默认情况下,Oracle系统不采用归档模式运行。
(6)密码文件
一般的用户名和口令是存放在数据字典中,不会存放在这个文件中。在一些特殊场景下,比如实例还未启动,这时,我可能需要以管理员的身份登入系统去执行一些恢复或者启动操作,然而此时,数据字典由于实例还没启动是不存在的,这时就需要外部口令文件进行用户身份的验证。
逻辑存储结构
Oracle将其物理结构从逻辑存储结构中抽象出来,物理机构是系统管理员能看到的,逻辑结构则是用户所能感知到的。
Oracle的逻辑结构由表空间(tablespace)、段(segment)、区(extent)、块(block)组成。一个数据库在逻辑上被划分为若干个表空间,表空间由一个或多个段组成,一个段由若干个区组成,一个数据区由一个或多个块组成
每个表空间由同一磁盘上的一个或多个文件组成,一个数据文件只能属于一个表空间。
(1)表空间(tablespace)
Oracle使用表空间(tablespace)将相关的逻辑结构(如段、数据区等)组合在一起,表空间是数据库的最大逻辑划分区域,通常用来存放数据表、索引、回滚段(即segment)等数据对象,任何数据对象在创建时都必须被指定存储在某个表空间中。
(2)段(segment)
段(segment)是由一个或多个数据区构成的,它不是存储空间的分配单位,而是一个独立的逻辑存储结构,用于存储表、索引或簇等占用空间的数据对象,Oracle也把这种占用空间的数据对象统一称为段。段有四种类型:数据段,索引段,回滚段,临时段。
(3)数据区(extent)
由一个或多个数据块组成,当一个段中的所有空间被使用完后,Oracle系统将自动为该段分配一个新的数据区,数据区是Oracle存储分配的最小单位。设置一张表或索引的存储参数包含设置它的数据区大小。
(4)数据块(block)
oracle数据库中最小的存储单位。Oracle数据存放在Oracle数据块中,而不是操作系统块中。Oracle的数据块一般为8K。数据块由块头、表目录、行目录、空余空间和行数据这5部分组成,数据块中可以存放表数据、索引数据和簇数据等。
本篇关于Oracle体系结构学习分享完结!虽然概念有点多,但是如果耐心看完,对Oracle数据库的整体理解很有帮助。感谢你的阅读,如果觉得还OK,欢迎点赞 ;关注 ; 收藏 ; 私信;一起成长!!!