2.3 Oracle进程结构

系统全局区(System Global Area, SGA)与Oracle进程的组合称为Oracle数据库实例。其中,SGA是由Oracle为一个实例分配的一组共亨内存区域,而Oracle进程则在系统启动后异步地为所有数据库用户执行不同的任务。

  2.3.1进程结构概述

  当Oracle数据库启动时,首先启动Oracle实例,系统将自动分配SGA,并启动多个后 台进程。Oracle数据库的实例进程分为两种类型:单进程Oracle实例和多进程Oracle实例。

  1. 单进程Oracle实例

在单进程Oracle实例中,一个进程执行全部Oracle代码,并且只允许一个用户存取。实际上就是服务器进程与用户进程紧密联系在一起,无法分幵执行。这种方式不支持网络连接, 不可以进行数据复制,一般用于单任务操作系统。

  2. 多进程Oracle实例

在多进程Oracle实例中,由多个进程执行Omde代码的不同部分,允许多个用户同时使用,对于每一个连接的用户都有一个进程。在多进程系统中,进程可以分为服务器进程、用 户进程,以及后台进程,其中服务器进程用于处理连接到Oracle实例的用户进程的请求,以执行如下任务。

 对SQL语句进行语法分析并执行。

 从磁盘的数据文件中读取必要的数据块到SGA的共享数据缓冲区中。

 将结果返回给用户进程。

 多实例进程除了包括用户进程与服务器进程以外,还包括后台进程。后台进程的作用是提高系统的性能和协调多个用户。

  Oracle实例的后台进程主要有如下几种:

数据库写入进程DBWru

日志写入进程LGWR

检查点进程CKPT

系统监控进程SM0N

进程监控进程PMON

归档进程ARCn

恢复进程REC0

封锁进程LCKn

调度进程Dnnn

快照进程SNPn

  

  2.3.2 DBWn 进程

  DBWn (Database Writer=数据库写入)进程是负责管理数据缓冲区的后台进程,并将缓冲区中的数据写入数据文件。在一个数据库实例中,DBWn进程最多可以启动20个’进程名称分别为:DBWO、DBW1、DBW2、…、DBW9、DBWa、DBWb、…、DBWj.

LRU (Least Recently Used,最近最少使用)

DIRTY表示“脏列”或者“弄脏了的数据”,实际上就是指被修改但还没有被写入数据 文件的数据。

  下面介绍DBWn进程的工作过程。

当一个用户进程产生后,服务器进程查找内存缓冲区中是否存在用户进程所需要的数据。

如果内存中没有需要的数据,则服务器进程从数据文件中读取数据。这时,服务器进程会首先从LRU中查找是否有存放数据的空闲块。

如果LRU中没有空闲块,则将LRU中的DIRTY数据块移入DIRTY LIST (弄脏表)。

如果DIRTY LIST超长,则服务器进程通知DBWn进程将数据写入磁盘,刷新缓冲区。

当LRU中有空闲块后,服务器进程从磁盘的数据文件中读取数据并存放到数据缓冲区中。

DBWn进程的作用主要有:管理数据缓冲区,以便用户进程总能找到空闲的缓冲区;将所有修 改后的缓冲区数据写入数据文件;使用LRU算法将最近使用过的块保留在内存中;通过延迟写来优化磁盘I/O读写。

  需要DBWn进程将修改后的缓冲区数据写入磁盘数据文件的情况,并不只有DIRTY LIST超长这一种。主要情况有如下几种:

当一个服务器进程将缓冲区数据移入DiRTY LIST,而DIRTY LIST超长时,服务器进程通知DBWn进程将数据写入磁盘。

当一个服务器进程在LRU中查找DB_BLOCK_MAX_SCAN_CNT缓冲区时,如果没 有找到空闲的缓冲区,则停止查找并通知DBWn进程将数据写入磁盘。

出现超时(每次3s)。此时DBWn进程对LRU表查找指定数目的缓冲区,将所有找到的弄脏缓冲区写入磁盘。

当出现检查点时,LGWR进程指定修改缓冲区数据,通知DBWn进程将其写入磁盘中。

  2.3.2 LGWR 进程

  LGWR (Log Writer,日志写入)是负责管理日志缓冲区的一个后台进程,用于将日志缓 冲区中的日志数据写入磁盘的日志文件中。

  在数据库运行时,对数据库的修改操作将被记录到日志信息中,而这些日志信息首先保存在日志缓冲区中。当日志信息达到一定数量时,由LGWR进程将日志数据写入日志文件中。 需要LGWR进程将缓冲区中的曰志数据写入磁盘的情况主要有如下几种:

用户进程提交事务。

日志缓冲区池已满1/3。

出现超时。

DBWn进程为检查点清除缓冲区块。

一个实例只有一个日志写入进程。

事务被写入日志文件,并确认提交。

  如果系统需要清除日志缓冲区,则LGWR进程在一个事务提交前就将日志信息写出,然后在用户发出COMMIT命令提交事务时将日志信息写入日志缓冲区。

  当一个事务被提交时,被賦予一个系统改变号(SCN),它与事务日志数据一起被记录到日志提示文件中。因为SCN的存在,所以可以使用日志对数据库进行数据恢复操作。

  LGWR进程将日志信息同步地写入在线日志文件组的多个日志成员文件中,如果日志文件组中的某个成员文件被删除或者不可使用,则LGWR进程可以将日志信息写入该组的其他文件中,从而不影响数据库正常运行。

  2.3.2 CKPT 进程

  CKPT (Check Point,检查点或检验点)进程一般在发生日志切换时产生。在系统运行过 程中,当需要将修改后的数据写回数据文件并且产生日志切换时,就会产生检查点,检查点 保证所有修改过的数据库缓冲区中的数据都被写入磁盘数据文件中。

  2.3.2 SMON 进程

SMON (System Monitor,系统监控)进程用于在实例启动时执行实例恢复,并负责清理不再使用的临时段。

在具有并行服务器选项的环境下,SMON进程对有故障的CPU或实例进行实例恢复。 SMON进程被有规律地唤醒,检查是否需要使用,其他进程需要时也可以调用此进程。

  2.3.2 PMON 进程

PMONCProcess Monitor,进程监控)进程用于在用户进程出现故障时执行进程恢复操作,负责清理内存存储区和释放该进程所使用的资源。

PMON进程周期性地检查调度进程和服务器进程的状态,如果发现进程己死,则重新启动它。PMON进程被有规律地唤醒,检查是否需要使用,其他进程需要时也可以调用此进程。

  2.3.2 ARCn 进程

  ARCn (Archive Process,归档)进程用于将写满的日志文件复制到归档日志文件中,防止日志文件组的循环使用将己有日志数据覆盖。

  2.3.2 RECO 进程

RECO (Recovery,恢复)进程存在于分布式数据库系统中,用于自动解决在分布式数据库中出现的事务故障。

  2.3.2 LCKn 进程

LCKn (Lock,封锁)进程存在于并行服务器系统中,用于实现多个实例间的封锁。在一个数据库实例中,最多吋以启动10个LCKn进程,进程名称分别为:LCKO、LCKK…、 LCK9。

  2.3.2 Dnnn 进程

Dnnn (Dispatchers,调度)进程存在于多线程服务器体系结构中,用于将用户进程连接到服务器进程。

 

 

 

 

 

 

 

 

 

 

posted @ 2014-02-11 17:34  石湖山庄  阅读(211)  评论(0)    收藏  举报