日志写入器进程(LGWR)负责通过将重做日志缓冲区条目写入磁盘上的重做日志文件来进行重做日志缓冲区管理。LGWR写入自上次写入以来已复制到缓冲区中的所有重做条目。LGWR启动并协调并发执行某些工作的多个辅助进程。LGWR处理非常快或必须协调的操作,并将操作委托给可以从并发操作中获益的LGnn,主要是将重做从日志缓冲区写入重做日志文件,并将已完成的写入发布到正在等待的前景进程。因为LGnn进程同时工作,并且某些操作必须按顺序执行,所以LGWR强制排序,以便即使写入完成了顺序,对前台进程的发布也将按照正确的顺序进行。重做日志缓冲区是一个循环缓冲区。当LGWR将重做日志缓冲区中的重做条目写入重做日志文件时,服务器进程就可以在已写入磁盘的重做日志缓冲区中的条目上复制新的条目。LGWR通常写入速度足够快,以确保缓冲区中的新条目总是可用空间,即使对重做日志的访问很重。LGWR将缓冲区的一个连续部分写入磁盘。
LGWR写道: 当一个用户进程提交了一个事务时
当发生联机重做日志切换时
当重做日志缓冲区为三分之一的满数据或包含1 MB的缓冲数据时
当重做日志缓冲区为三分之一的满数据或包含1 MB的缓冲数据时
在DBWn进程将修改后的缓冲区写入磁盘之前(如果需要)
自上次写入日志文件后已经过三秒钟时
必须将缓冲区写入磁盘(提前写入协议)。如果DBWn发现一些重做记录没有写,它信号LGWR写重做记录磁盘和等待LGWR完成写重做日志缓冲区之前可以写出数据缓冲区LGWR LGWR完成写重做日志缓冲区之前可以写出数据缓冲区。LGWR会写入当前日志组。如果组中的其中一个文件损坏或不可用,则使用LGWR 继续写入组中的其他文件,并在LGWR跟踪文件和系统警报日志中记录一个错误。如果组中的所有文件都损坏,或者组因未存档而不可用,则LGWR无法继续工作。 当用户发出提交语句时,LGWR会将一个提交记录放入重做日志缓冲区中,并立即将其与事务的重做条目一起写入磁盘。对数据块的相应更改将被延迟,直到编写它们更有效为止。这被称为快速提交机制。包含事务的提交记录的重做条目的原子写入是决定事务是否已提交的单个事件。Oracle数据库向提交事务返回成功代码,尽管数据缓冲区尚未写入磁盘。
如果需要更多的缓冲区空间,LGWR有时会在提交事务之前写入重做日志条目。只有在稍后提交事务时,这些条目才会成为永久的。当用户提交事务时,事务将被分配一个硫氰酸盐,Oracle数据库将它与事务的重做条目一起记录在重做日志中。scn记录在重做日志中,以便恢复操作可以在实际应用程序集群中同步和分布式 资料库。
在高活动时,LGWR可以通过使用组提交写入重做日志文件。例如,假设一个用户提交了一个事务。LGWR必须将事务的重做项写入磁盘发生这种情况时其他用户出现问题 提交语句,但是LGWR不能进入磁盘。当发生这种情况时,其他用户会发出提交语句。但是,在完成上一次写入之前,LGWR无法写入重做日志文件来提交这些事务 活动在将第一个事务的条目写入重做日志文件后,可以在一次操作中将等待事务(尚未提交)的整个重做条目列表写入磁盘,这比单独处理的事务条目需要更少。因此,Oracle数据库最小化磁盘I/O,最大化LGWR的性能。如果提交请求以高速率继续,那么重做日志缓冲区中的每次写入(通过LGWR)都可以包含多个提交记录。