9.2.6 重做日志的切换

数据库服务器在运行过程中,LGWR后台进程将重做日志写入重做日志文件。当第一个日志组写满后,LGWR将自动切换到第二个日志组,并将重做日志写入第二个日志组。依此类推,当最后一个日志组被写满后,LGWR将自动切换到第一个日志组,这个循环的过程是自动进行的。

在有些特殊的情况下,需要手工切换日志,在当前重做日志组尚未写满的时候,强制LGWR进程将重做日志写入下一个日志组。比如,要删除当前日志组时,需要先强制切换日志。手工切换重做日志的命令是ALTER SYSTEM,执行手工切换重做日志任务的用户需要有ALTER SYSTEM系统权限。命令的完整格式为:


ALTER SYSTEM SWITCH LOGFILE


无论是自动切换还是手工切换,当发生重做日志的切换时,日志序列号将自动加一,日志序列号和当前的SCN被写入控制文件。随后CKPT后台进程将发出检查点,将SCN写入控制文件和数据文件,然后激活DBWR后台进程,将数据库高速缓存中的脏缓冲区写入数据文件。

尽管重做日志组是循环使用的,但是日志序列号却是无限递增的。每次发生重做日志的切换时,数据库服务器为当前重做日志组指定一个日志序列号,这个序列号是在前一个序列号的基础上加一而得的。在对重做日志文件进行归档时,这个序列号被一起写入了归档日志文件。重做日志文件和归档日志文件就是通过重做日志序列号来唯一地标识的。在进行数据库的恢复时,将按照序列号递增的顺序依次查找所需的重做日志文件和归档日志文件。