oracle 10g进程之DBWn、LGWR、SMON
oracle 10g进程之DBWn、LGWR、SMON
DBWn:Databasewriter process 数据库写入器
为了保证缓冲区能有空余的缓冲供用户使用。
DBWn将缓冲区的内容雪茹到数据文件中,并负责将数据库缓冲池中对数据进行修改的Dos命令写到磁盘中。
参数db_writer_process可以指定DBWn进程数量,这个参数的最大值是20。如果数据库启动的时候用户没有指定db_writer_process,oracle就会自动根据计算机的cpu和processor决定db_writer_process的大小。
在oracle 10g中,以下条件会触发DBWn进程:
1、 系统没有多余的空缓冲区来存放数据;
2、 CKPT进程触发DBWn进程。
LGWR:log writerprocess日志写入器
该进程负责重做日志缓冲池的管理,将重做日志缓冲区中的数据写入磁盘上的重做日志文件中。
有以下情况时,LGWR进程会执行:
1、 当用户提交事务时;
2、 每隔三秒钟;
3、 当重做日志缓冲区使用了1/3,并且其中有1MB的脏数据;
4、 当DBWn进程将更改的DOS命令写入磁盘并且需要重做日志的时候。
有以下几点需要注意:
1、在DBWn写入更改的DOS命令之前,在缓冲区中与之相关联的更改的重做日志记录都必须写入磁盘中。如果DBWn发现某些重做记录没有被写入磁盘,它就会提示LGWR将这些重做日志写入磁盘,并且等待LGWR完成,才会将数据写入磁盘。
2、事务提交的时候会触发LGWR进程,但是在有的时候需要很大的缓冲区,这时候LGWR就会在事务提交之前就将事务写入重做日志记录中,这些日志记录会在事务提交的时候永久的保存在重做日志记录中。
每当一个用户提交一个事务,这个事务就会被分配一个SCN(系统更改号),它会随着事务的重做日志一同被oracle记录到重做日志文件中。在重做日志文件中记录SCN是为了能够保证实际的应用集群和分布式数据库在做恢复操作的时候能够保证同步。
日志缓冲区是一个循环缓冲区。当LGWR将日志缓冲区的日志写入日志文件后服务器进程可将新的日志写入该日志缓冲区。LGWR通常写的很快,可确保日志缓冲区总有空间可写入新的日志。
SMON:systemmonitor process系统监控进程
系统监控进程在实例启动时执行恢复操作。
系统监控负责在数据库启动的时候清理临时表空间中的临时段,或者一些异常操作过程中遗留下来的临时段。例如,当创建索引过程中,创建期间分配给索引的segment被标志为Temporary,如果create index(或者rebuild index等)会话因某些原因异常中断,smon负责清理这些临时段。
表空间的pctomcrease设置为非零值时,在DMT(字典管理空间)中,smon负责把那些在表空间中空闲的并且互相邻近的extent结合成一个较大的空闲扩展区。