Oracle数据库的后台进程管理技术介绍

2/9/2008来源:Oracle教程人气:7204

    1、PMON (The PRocess Monitor) 进程监控器     主要负责连接非正常中断后的清除工作,PMON负责释放相应的资源。     PMON将回滚没有提交的工作,释放锁,释放分配给这个失败进程的Free SGA资源。除了清理失败的连接之外,PMON还负责监控所有其它的Oracle后台进程,假如有需要的话,将重起这些后台进程,比如一个 shared server或者一个dispatcher fail的话, PMON将跟进,重起另一个相应的进程。     2、SMON (The System Moniter) 系统监控器     主要负责其它进程不想处理的工作的进程,是数据库的一种“垃圾回收站”,主要包括:     2.1、临时空间的清除;     比如创建索引失败时,SMON将负责清除在创建索引过程当中分配出来的Temporary extent.     2.2、崩溃恢复;     2.3、Coalescing free space;     这个是在字典治理的表空间才会有的,SMON将表空间中连续的空闲的extent,合并成一个大的free extent.这只能发生在字典治理的表空间,并且pctincrease 被设置成非零的时候。     2.4、Recovering transactions active against unavailable files;     2.5、OPS中失败节点的实例恢复;     在OPS中,当一个节点Fail,其它节点将打开失败节点的重做日志,对失败节点执行恢复(注重:实例恢复和崩溃恢复的区别)。     2.6、清除OBJ$;     2.7、Shrinks 回滚段;     假如设置了Optimal,那么SMON将执行自动 Shrink 回滚段到Optimal 大小。     2.8、脱机 回滚段;     举个例子,比如在切换回滚表空间的时候,由于可能之前的回滚表空间中有活动的事务,所以回滚表空间中的一些回滚段可能并不是真正的脱机,而只是标志为" Pending offline",要等到活动事务提交或回滚之后,相应的回滚段才算真正的脱机,而SMON则周期性的在后台去真正的脱机回滚段,直到回滚段真正的脱机为止。     3、CKPT (Checkpoint Process)     CKPT进程并不像它的名字暗示的那样会进行一个checkpoint事件,它只是更新数据文件头。Oracle 8.0之前,CKPT是一个可选进程,之后就总是开启的了,更新数据文件头在CKPT出现之前这是LGWR的任务,但是后来随着文件数量增大,这个LGWR的附加任务变得太大而成为负担。于是就出现了CKPT,由CKPT分担着这部分任务。     4、DBWn (Database Block Writer)     DBWn是一个负责将dirty blocks写到磁盘的后台进程,通常将dirty blocks写到磁盘是为了腾空更多的空闲空间(为了其它数据的读 而释放缓冲区), 或者advance 一个检查点事件(也就是在发生故障实例恢复时, 将联机重做日志中Oracle开始读取的位置 前移以节省实例恢复的时间)Log Switch 会触发一个Checkpoint,Oracle 需要advance这个Checkpoint以至于在实例恢复时不需要这个刚被填满的online redo log,假如在重用这个日志之前,不能完成这个advance Checkpoint的操作,则我们在alert将发现"Checkpoint not Compelete"信息,并且必须等待这个事件的完成。     5、LGWR (Log Writer)     LGWR负责将Redo log buffer (位于SGA中)中的内容写入到联机日志文件。     下面几种情况将会触发LGWR写log buffer:     5.1、每三秒;     5.2、当用户commit时;     5.3、当重做日志缓冲区 1/3满 或者包含1M 的缓冲数据时。     由于上面的原因,使用一个大于3M的重做日志缓冲区是不实际的——Oralce永远无法完全使用它。与DBWn必须执行分散的I/O 不同,重做日志是以顺序写入的方式写入的,这样执行大量的批写入更加有效率。     6、ARCn (Archive Process)     ARCn是负责copy 已经写满的online redo log到另外一个地方。注重这里的redo log的copy不是文件级别的Copy,而是copy redo log里面的entries.这些归档日志可以用来处理Media Recovery.比如你的system01.dbf文件丢失,那么你可以利用你一周前的备份,Restore 该数据文件。     然后请求数据库应用从备份开始后的所有的归档日志和在线日志文件,这样的话,该数据文件就可以“追”上数据库中的其它的数据文件,然后我们可以继续processing,而不会丢失数据。中文翻译 "catch up" that file with the reset of the datafiles in our database.中的"cacth up"翻译为"弥补",我觉得翻译成"追"更合适,因为这样才能更好的理解日志其实是一种数据流。
    实际上,备份是baseline,而日志是一种数据流,指向到系统crash的点,两者共同使用才能回到当前点,其实中文就这个很模糊,所谓恢复是两件事情,restore和recover .     7、RECO (Distributed Database Recovery)