Oracle体系结构

比起成功,失败教会我们更多的道理。——Anna Quindlen

从宏观来讲,我们可以通过查看Oracle数据库数据文件了解其基本物理结构,联系逻辑对应表,大概知晓Oracle逻辑结构。当Oracle数据库启动时,将启动相应进程,加载内存结构,读取相应数据信息,最终打开运行数据库。

在了解Oracle数据库基本的物理及逻辑结构后,需要进一步了解和数据其体系结构。Oracle体系结构知识及其庞杂,Oracle所有核心都将围绕其体系结构进行实现。学习Oracle体系结构,及熟悉Oracle基本原理,是每一个学习Oracle技术人员的必备课程。

Oracle体系结构图:

一、Oracle数据库组成

从严格意义来讲,Oracle数据库由实例和数据库两部分组成:

实例:实例是数据库启动时初始化的一组进程和内存结构

数据库:数据库则指的是用户存储数据的一些物理文件

实例和数据库是多对一关系。实例是暂时的,当数据库启动时,数据库将加载相关配置信息,启动实例,然后转载数据库。

二、Oracle实例进程

2.1,PMON进程

PMON进程,全名Process Monitor,用于监控其他用户进程,当出现其他用户进程失败时,执行用户进程恢复及清理工作。PMON的主要功能在于释放失败进程的内存锁及其他资源。

2.2,DBWn

DBWn进程,全名为Database Writer Process。该进程负责将内存中的变更数据写入磁盘数据文件。当系统繁忙时,可以添加多个进程,所以增加n为后缀。

2.3,LGWR

LGWR进程,全名Log Writer Process。LGWR进程管理SGA中的Redo Log Buffer,将其中的内容连续写出到在线的日志文件中。Oracle中的redo记录可以重演数据库的状态变更,对于数据库的恢复起到至关重要的作用。数据库在事务提交时,将确保日志文件的连续提前写出,从而不仅保证了DBWn的延迟写出,也保证了数据的持久性。

在以下条件中,LGWR将执行写出操作:

a,用户提交事务

b,在线日志发生切换

c,距上次写操作3秒

d,Redo Log Buffer 1/3满或者具备1MB数据

e,在DBWn执行写出前,需要确保相应脏数据的对应日志都已经写出,此时会通知LGWR写出此前未完成写出的相关日志。

2.4,CKPT

CKPT进程,全名CheckPoint Process。它负责更新控制文件和数据文件头的检查点信息。检查点信息主要包括检查点位置、SCN、redo恢复位置等。

2.5,SMON

SMON进程,全名System Monitor Process。负责一系列的系统级别的清理和其他工作。

a,在数据库启动时,执行必要的实例恢复。

b,执行在实例恢复时跳过的中断事务,如读取文件或表空间离线等错误。

c,回滚死事务

d,清理不再使用的临时段。

e,在字典管理表空间中,执行连续自由区间的合并。

f,维护SMON_SCN_TIME系统表

g,维护col_usage$数据字典等表

h,定期OFFLINE多余回滚段

三、Oracle实例SGA

SGA由多个缓存池组成,缓存池中存放着需要读取及写入的数据,由于缓存池的存在,大大加快了Oracle数据库的运行处理速度。

3.1,Database Buffer Cache

Database Buffer Cache,即高速数据缓存区。数据缓存区中存放着Oracle系统最近访问过的数据块,当用户通过sql去获取数据时,服务器进程将先去扫描缓冲区,如果缓存命中,则直接更新,数据变脏;如果没有命中,由服务器进程将对应数据块先从磁盘上复制到缓冲区内,再进行更新操作。

3.2,Redo log buffer cache

Redo log buffer cache,即用于存放对数据库进行修改操作时产生的日志信息,这些日志信息在写入到重做日志文件之前,首先存放到重做日志缓冲区中,然后在检查点发生或重做日志缓冲区中的信息量达到一定的峰值时,由日志写入进程(LGWR)将此缓冲区的内容写入到重做日志文件。

3.3,Shared Pool

Shared Pool,即共享池,共享池是最复杂的SGA结构,它有许多子结构,我们来看看常见的几个共享池组件:

a.库缓存:库缓存这块内存区域会按已分析的格式缓存最近执行的代码,这样,同样的sql代码多次执行的时候,就不用重复地去进行代码分析,可以很大程度上提高系统性能。

b.数据字典缓存:存储oracle中的对象定义(表,视图,同义词,索引等数据库对象),这样在分析sql代码的时候,就不用频繁去磁盘上读取数据字典中的数据了

c.PL/SQL区:缓存存储过程、函数、触发器等数据库对象,这些对象都存储在数据字典中,通过将其缓存到内存中,可以在重复调用的时候提高性能。

3.4,Large Pool

Large Pool,即大池,大池是个可选的内存区域,前面我们提到专有服务器连接和共享服务器连接,如果数据库采用了共享服务器连接模式,则要使用到大池;RMAN(Oracle的高级备份恢复工具)备份数据也需要大池。

3.5,JAVA Pool

Java池,Oracle 的很多选项使用java写的,Java池用作实例化Java对象所需的堆空间。

四、数据库

4.1,Parameter File

Parameter File,即数据库参数文件。oracle数据库通过一系列参数来对数据库进行配置。这些参数是以键-值对的形式来表 示的,如:MAXLOGFILES=50。其中,等号左边是参数名,右边是对应的参数的值,值的类型有多种,典型的如数字和 字符串。参数文件就是存储这些参数的地方,oracle在启动时会从参数文件中读取相关的配置。

4.2,Control File

Control File,即数据库控制文件。控制文件是一个小小的二进制文件,是Oracle数据库的一部分,这个控制文件是用于记录数据库的状态和物理结构。每个数据库必须要至少一个控制文件,但是强烈的建议超过一个控制文件,每个控制文件的备份应该放在不同的磁盘上。

控制文件记录数据库名、数据库创建的时间戳、数据文件的名字和位置、redo log (联机重做日志文件)的名字和位置、当前日志的序列号和checkpoint 信息等信息。

4.3,日志文件

日志文件分为Redo Log File和Archived Log File,即分为重做日志文件和归档日志文件。重做日志文件保证了数据库的可恢复性,是保存数据修改操作的地方;归档日志文件相当于重做日志文件的累积,由于重做日志文件是循环使用的,故历史重做记录会被覆盖,而归档日志文件有效的解决该问题,将重做日志连续累积存放起来。利用日志文件,Oracle可以将因异常情况停机的数据库恢复启动起来。

4.4,Datafile

Datafile,即数据文件。数据文件是保存数据及数据修改结果的地方,数据文件保证了数据库的持久性。

4.5,Password File

Password File,即数据库密码文件,主要是进行DBA权限的身份认证。

五,体系结构变迁

随着Oracle数据库版本的更替,Oracle数据库的功能也越来越强大,其体系结构也愈发复杂,但,不管Oracle版本如何变更,其体系结构整体上还是依托于以上结构进行调整。故,万变不离其宗,学习体系结构,核心为基础,再慢慢进行拓展。下面再提出Oracle 11g完整体系结构图:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180111G0I51400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券