后台进程是指由Oracle服务器隐含执行的进程。当启动例程时,Oracle不仅会分配SGA,而且还会启动后台进程;当关闭例程时,Oracle不仅会释放SGA所占用的内存空间,而且还会释放后台进程所占用的CPU和内存资源。Oracle提供了许多后台进程,下面介绍常用的后台进程SMON、PMON、DBWR、LGWR、CKPT、ARCH。
1、SMON(System Monitor)
SMON用于执行例程恢复,假定在数据库运行过程中出现例程失败(断电、内存故障、后台进程例外等),此时SGA信息尚未被完全写入到磁盘(数据文件、重做日志)。当重新打开数据库时,后台进程SMON会按照以下步骤自动执行例程恢复:
(1.1)REDO:重新应用那些被记载道重做日志但是没有写入到数据文件的数据,因为所有被提交的事务都已经记录在重做日志,所以可以确保恢复事务数据。
(1.2)打开数据库。在打开数据库时,既包含了被提交的数据,也包含了未被提交的数据(加锁)。
(1.3)UNDO:取消未提交数据。在打开数据库之后,Oracle会自动使用UNDO段回退未提交的数据。
2、PMON(Process Monitor)
PMON用于监视服务器进程的执行,并且在服务器进程失败时清除该服务器进程。当访问Oracle Server时,Oracle会在服务器端为用户进程(应用程序对应的进程)分配服务器进程。假定用户例程因地址例外意外终止运行,PMON可以轮询检测到该服务器进程,并执行以下操作:
(2.1)回退用户的当前事务
(2.2)释放服务器进程所占用的表锁和行锁
(2.3)释放用户所占用的其他资源
3、DBWR(Database Writer)
DBWR用于将数据高速缓存的脏缓冲区数据写入到数据库文件中。当执行DML操作时,服务器进程会修改缓冲区,并且将这些缓冲区标示为“脏缓冲区”,将来这些脏缓冲区的数据会有后台进程DBWR写入到数据文件中。默认情况下只有一个DBW0进程。通过设置初始化参数db_writer_processes可以定义最多10个DBWR进程(DBW0~DBW9),在出现以下情况时,DBWR进程会开始工作。
(3.1)系统发出检查点(checkpoint)
(3.2)服务器进程不能找到空闲缓冲区
(3.3)删除或截断表
(3.4)使表空间正常脱机(ALTER TABLE ......OFFLINE NORMAL)
(3.5)开始表空间备份(ALTER TABLESPACE ......BEGIN BACKUP)
4、LGWR(Log Writer)
LGWR用于将重做日志缓冲区记载的全部内容写入到重做日志。当执行DML或DDL语句时,服务器进程首先将事务变化写入到重做日志缓冲区,然后才会修改数据高速缓存。注意Oracle总是“先日志后修改”(先记载变化后修改数据)。因此,在将脏数据写入到数据文件之前,Oracle首先将事务变化写入到重做日志。也就是说在DBWR工作之前,LGWR首先将事务变化写入到重做日志。在出现以下情况时,LGWR进程会开始工作。
(4.1)提交事务(COMMIT)
(4.2)每隔三秒
(4.3)当重做信息超过1M时
(4.4)重做日志缓冲区已有1/3填满
(4.5)在DBWR进程将脏缓冲区写入到数据文件之前
5、CKPT(Checkpoint Process)
CKPT用于发出检查点(Checkpoint ),并且检查点会同步数据库的的数据文件、控制文件和重做日志。当发出检查点时,后台进程CKPT会将检查点时刻的SCN(System Change Number)写入到控制文件和数据文件头部,同时会促使后台进程DBWR将所有脏缓冲区数据写入到数据文件。当发出检查点时,不仅后台进程CKPT和DBWR要开始工作,而且LGWR也会将重做日志缓冲区写入到重做日志,从而确保了数据文件、控制文件和重做日志的一致性。在以下情况下CKPT会开始工作:
(5.1)日志切换
(5.2)关闭例程(SHUTDOWM ABORT除外)
(5.3)手工检查点操作(ALTER SYSTEM CHECKPOINT)
(5.4)由初始化参数fase_start_mttr_target强制发出检查点
6、ARCH(Archive Process)
ARCH用于将重做日志的事务变化复制到归档日志中,该后台进程只有在(ARCHIVELOG)模式下才会被启动。默认情况下只会启动两个归档进程(ARC0、ARC1),通过设置初始化参数log_archive_max_processes可以最多定义10个归档进程(ARC0~ARC9),在(ARCHIVELOG)模式下当进行日志切换时会自动生成归档日志。
在Oracle服务器中,最多可以启动100多个后台进程。但当启动了例程的时候,后台进程SMON、PMON、CKPT、DBWR、LGWR一直处于启动状态。通过查询动态性能视图可以显示所有后台信息。如:select * from V$BGPROCESS
本文出自 “努力奔向前方” 博客,请务必保留此出处http://liucb.blog.51cto.com/3230681/1576319
原文地址:http://liucb.blog.51cto.com/3230681/1576319