1.重做日志写进程(LGWR)
LGWR负责将redo log buffer 的记录顺序的写到redo log files中,减少I/O量。
以下情况需要将redo log buffers(内存)的记录顺序的写入到redo log(外存)中
- 某个事物被提交时;
- 当redo log buffers中变化的记录超过1MB时;
- 当redo log buffers中所存的记录超过缓冲区容量的1/3;
- 在DBWR将数据库高速缓冲区中修改过的数据块写到数据文件之前;
- 每3秒钟;
2.数据库写进程(DBWR/DBWn)
负责将DB buffers cache上的脏缓冲区的数据写到数据文件上。并不是已出现脏缓冲区DBWR就写入数据,而是积累了足够多的数据一次性写一大批内存数据到数据文件上。
Oracle允许在一个实例上最多启动10个数据库写进程。DBW0-DBW9
以下情况需要将DB buffers cache(内存)的数据写到数据文件(外存)中:
- 当脏缓冲区的数量超过了设定限额;
- 所设定是时间间隔已到;
- 当有进程需要DB buffers cache却找不到空闲的缓冲区时;
- 当校验点发生时;
- 当某个表被删除(drop)或被截断(truncate)时;
- 当某个表空间被设置为只读(read only)状态时;
- 当使用类似于ALTER TABLESPACE users BEGIN BACKUP的命令对某个表空间进行联机备份时;
- 当某个临时表空间被设置为只脱机状态(offline)或正常状态(normal)时;
3.系统监督进程(SMON)
系统崩溃时,SGA任何没有来得及写到磁盘中的信息都会丢失,如有些已经提交的数据还没有真正写到数据文件中,这种情况下,数据库重启时,SMON会自动执行Oracle实例的恢复工作,步骤如下:
- 执行前滚(roll forward),将已经写到redo log中但还没写到数据文件中的提交数据写到数据文件中(用SCN号码识别提交记录)
- 在前滚完成后立即打开数据库,此时用户就可以登录并使用数据库。
- 回滚没有提交的事务;
除此之外,SMON还要执行如下磁盘维护工作:
- 回收或组合数据文件中相连的空闲区;
- 释放临时段(执行sql时用作排序的磁盘区),将它们还给数据文件作为空闲区使用;
4.进程监督进程(PMON)
当某个进程崩溃时(如在没有正常退出oracle的情况下重启了PC),PMON将负责清理工作,如下:
- 回滚用户当前事务;
- 释放用户所加的所有表一级和行一级的锁;
- 释放用户所有的其他资源等;
5.校验点(checkpoint)和校验点进程
校验点事件:当DBWR进程把已经改变了的DB buffers cache中的数据(包括提交的和没提交的数据)写到数据文件上时产生。
将校验点号码写入所有相关的数据文件的文件头中;
将校验点号码,重做日志序列号,归档日志名称和SCN号都写入控制文件中;