浅析Oracle体系结构


当前第2页 返回上一页

图5 Connection & Session

Background Process(后台进程)主要包括:SMON(系统监控器进程 )、PMON(进程监控器进程)、DBWR( 数据库写入程序进程)、LGWR(日志写入程序进程)、CKPT(检查点进程)。

1)PMON(Process Monitor)

PMON的主要作用如下:

  • 监控各个Oracle后台进程是否正常,发现异常的进程将其清除掉,重新生成该进程。
  • (说明:当用户进程断掉时,Server Process 留着就没用了,但是还占着空间,PMON 会定时检查 Server Process ,如果和 User Process 连接不上了,PMON 会把 Server Process 收回,把 PGA 空间收回,里面的锁也收回。)
  • 监控空闲会话是否到达阀值。
  • 动态注册监听。

2)SMON(System Monitor)

SMON的主要作用如下:

  • 当Oracle运行时突然宕机,下次启动需要实例恢复(Instance Recovery),SMON负责实例恢复的全程监控;
  • 当Oracle运行时突然宕机,在下一次启动Oracle Instance的时候,它里面一些没有释放的资源会由SMON进行清理;
  • 一些事务失败的时候也由SMON进行清理;内存空间很分散(不连续)时需要SMON将这个分散的空间整合起来;
  • 释放不再使用的临时段(Segment)。

3)DBWR(Database Writer)

DBWn是Oracle中工作最繁重的进程。主要作用如下:

  • 将 Database Buffer Cache 中的脏块(Dirty Buffer)写到 Data File 中。
  • 释放Data Buffer Cache空间。

小说明:
如果数据库的负荷比较大,来自于客户端的请求比较多,存在大量的IO操作,需要频繁的将缓冲区的内容写到磁盘文件上,那么这时就可以配置多个DBWn(一共Oracle支持20个DBWn,DBW0-DBW9,DBWa-DBWg)。通常一个中小型的Oracle只需要一个DBW0 Process就可以了。

注意:以下几种情况发生时,都会触发DBWR Process将 Database Buffer Cache 的内容写到Data Files :

  • Checkpoint Occurs
  • Dirty Buffer reach threshold
  • There are no free Buffers
  • Timeout occurs
  • RAC ping request is made
  • Tablespace OFFLINE
  • Tablespace READ ONLY
  • Table DROP or TRUNCATE
  • Tablespace BEGIN
  • BACKUP

小补充:
服务器进程对数据文件执行读操作,而 DBWR 负责对数据文件执行写操作。

小问答:
Commit 时 DBWR 有何动作?
答:什么也不做!

4)LGWR((LOG Writer))

Oracle Instance中只有一个LGWR Process,这个Process的工作和DBWR Process类似。主要作用如下:

将 Redo Log Buffer 中的内容写入到 Redo Log Files 中(必须在 DBWR 写脏块之前写入日志)。

(Redo Log Buffer 是一个循环的Buffer,对应的 Redo Log Files 也是一个循环的文件组,从文件头开始写,当文件写满了,又会从文件头开始写,会把前面的内容覆盖掉,为了避免将 Redo Log Files 覆盖掉可以选择将其写入到 Archived Redo Log Files 中。)

注意:以下几种情况发生时,都会触发LGWR Process将 Redo Log Buffer 中的内容写到 Redo Log Files :

  • At Commit
  • When one-third full
  • When there is 1 MB of redo
  • Every three seconds
  • Before DBWn writes

怎么保证提交的事务永久保留呢?
答:已执行update操作为例 。
1. 当写提交语句的时候,修改已经写到 Redo Log Buffer 里了;
2. 当看到返回提交成功时,说明修改已经写到磁盘 Redo Logfile 里了;
3. 所以提交成功后,改动已经同步到磁盘了,不会丢了。

5)CKPT(Checkpoint)

CKPT的主要作用如下:

  • 生成检查点, 通知或督促 DBWR 写脏块;
  • *完全检查点:保证数据一致性。
  • *增量检查点:不断更新控制文件中的检查点位置,当发生实例崩溃时,可以尽量缩短实例恢复的时间。在Data File的在文件头更新检查点信息;在Control File中更新检查点的信息。

6)ARCn(Archiver)

  • ARCn是一个可选的后台进程(几乎可看作必选进程)。
  • Oracle可以运行在两种模式下:ARCHIVELOG MODE(归档模式)、NOARCHIVELOG MODE(非归档模式)。
  • DBA 必须做出的一个重要决策是,配置数据库在ARCHIVELOG模式下运行,还是在NOARCHIVELOG模式下运行。
  • 联机重做日志文件填满后,oracle实例开始写入下一个联机重做日志文件。
  • 从一个联机重做日志文件切换到另一个联机重做日志文件的过程称为日志切换。

ARCn的主要作用如下:

当Oracle运行在归档模式时

  • ARCn进程在每次进行日志切换时都会开始对已填满的日志组进行备份或归档。
  • ARCn进程会在可以重新使用日志之前自动归档重做日志文件,因此会保留对数据库所做的所有更改。

这样,即使磁盘驱动器损坏,也可以将数据库恢复到故障点。

通过上面的学习,先把图1更新如下:

图6 Oracle 数据库体系结构

Database

Database 其实就是由一堆物理文件组成的,主要是用于存储数据,Database 中主要包含三种类型的文件:Data Files、Control Files、Redo Log Files。
另外还有Parameter File、Password File、Achieved Log Files等。

1)Data Files(数据文件)

Data Files 就是用于存储数据的,Table 中的数据都是保存在 Data Files 中的。

2)Control Files(控制文件)

Oracle为了操作Data File,提供了一些 Control Files,这些 Control Files 主要是记录数据库的一些控制信息。

3)Redo Log Files(重做日志文件)

Redo Log Files 记录着数据库的改变,如果向数据库中放入数据或者是修改里面的数据,只要对数据库作了修改,那么就要将修改之前的状态、修改之后的状态都记录在 Redo Log Files 中,其作用就是恢复Data File。
* 例如:数据库有一个事务需要提交,但是提交失败了,事务就要回滚,那么事务回滚的依据就来自于这个 Redo Log Files。Redo Log Files 中记录着数据库的改变,关于这个事务的改变,如果需要回滚就需要把Redo Log Files中的数据取出来,依照 Redo Log Files 中的数据把 Data Files 恢复到修改之前的状态。

4)Parameter File(参数文件)

任何一个数据库都必须要有参数文件,这个参数文件规定了Oracle中的一些基本的参数、初始化的参数的值。

5)Archived Log Files(归档日志文件)

Archived Log Files 和 Redo Log Files 是相辅相成的,Redo Log Files 其实是一个反复利用的过程,会有几个(一般为3个)固定的文件,这些固定文件会被依次使用,用满了以后,Oracle就会再次写这个文件头,就把以前的东西冲掉了。为了进一步加强数据库的备份恢复能力,在覆盖之前把这些修改的信息都归档到 Archived Log Files 中。

6)Password File(密码文件)

用户客户端连接到后台数据库系统时候存储口令的。

小问答:
Instance 和 Database 的对应关系是怎样的呢?

答:Instance :Database = n :1
1个 Instance 只能属于1个数据库,可以多个 Instance 同时访问1个数据库。

小补充:
Oracle 的内存结构(Memory Structure)

Oracle 的 Memory Structure 实际上包含两部分内容:SGA和PGA

SGA(System Global Area系统全局区)

  • 一个 Oracle Instance 对应一个SGA,SGA 在Oracle Instance启动的时候被分配,SGA 是Oracle Instance 的基本组成部分。
  • 一个 Oracle Instance 仅有一个 SGA,SGA是一个非常大的内存空间,甚至可以占据物理内存的80%。

PGA(Program Global Area程序全局区)

  • 一个 Server Process 启动的时候就会分配一个 PGA。在 Oracle Instance 中 PGA 可能会很多。例如启动10个Server Process就会有10个PGA。
  • PGA 存放用户游标、变量、控制、数据排序、存放 hash 值。
  • 与 SGA 不同,PGA 是独立的,非共享。是分配给一个进程并归该进程私有的内存区域。

到此这篇关于Oracle体系结构的文章就介绍到这了,更多相关Oracle体系结构内容请搜索


标签:Oracle

返回前面的内容

相关阅读 >>

oracle 最大连接数的问题

navicat连接oracle失败怎么办

navicat for oracle工具连接oracle的方法步骤(图文)

oracle如何慢查询?

oracle触发器trigger详解

oracle也有注入漏洞

基于docker部署oracle19c的详细记录

linux中oracle数据库备份

oracle中plsql的用法总结

linux 7下脚本安装配置oracle 11g r2教程

更多相关阅读请进入《oracle》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...