什么是重做日志?

恢复操作的最关键结构是重做日志,它由两个或多个预先分配的文件组成,这些文件存储数据库发生的所有更改。 Oracle数据库的每个实例都有一个关联的重做日志,用于在发生实例故障时保护数据库。

重做的线程

在多个数据库实例的环境中讲话时,每个数据库实例的重做日志也称为重做线程。在典型的配置中,只有一个数据库实例访问Oracle数据库,因此只有一个线程存在。但是,在Oracle Real Application Clusters环境中,两个或更多实例同时访问单个数据库,并且每个实例都有自己的重做线程。每个实例都有一个单独的重做线程,可以避免争用一组重做日志文件,从而消除潜在的性能瓶颈。

本章介绍如何配置和管理标准单实例Oracle数据库上的重做日志。在所有讨论和语句示例中,线程数可以假定为1。有关Oracle Real Application Clusters环境中的重做日志组的信息,请参阅Oracle Real Application Clusters管理和部署指南。

重做日志内容

重做日志文件充满重做记录。重做记录也称为重做条目,由一组变化向量组成,每个变化向量描述对数据库中的单个块所做的更改。例如,如果更改员工表中的工资值,则会生成包含更改向量的重做记录,这些更改向量描述对表的数据段块,撤消段数据块以及撤消段的事务处理表的更改。

重做条目记录可用于重建对数据库所做的所有更改(包括还原段)的数据。因此,重做日志还保护回滚数据。当您使用重做数据恢复数据库时,数据库将读取重做记录中的更改向量并将更改应用到相关块。

重做记录以循环方式缓存在SGA的重做日志缓冲区中(请参阅“Oracle数据库如何写入重做日志”),并由日志编写器(LGWR)数据库后台进程写入其中一个重做日志文件。无论何时提交事务,LGWR都会将事务重做记录从SGA的重做日志缓冲区写入重做日志文件,并为每个已提交事务分配一个系统更改编号(SCN)以标识重做记录。只有在联机日志中与给定事务关联的所有重做记录安全地位于磁盘上时,用户进程才会通知事务已提交。

在提交相应的事务之前,重做记录也可以写入重做日志文件。如果重做日志缓冲区填满或其他事务提交,则LGWR会将重做日志缓冲区中的所有重做日志条目刷新到重做日志文件,即使某些重做记录可能未提交。如有必要,数据库可以回滚这些更改。

Oracle数据库如何写入重做日志

数据库的重做日志由两个或更多重做日志文件组成。数据库至少需要两个文件才能保证一个文件可以随时写入而另一个正在归档(如果数据库处于ARCHIVELOG模式)。有关更多信息,请参阅“管理已归档的重做日志”。

LGWR以循环方式写入重做日志文件。当前重做日志文件填满后,LGWR开始写入下一个可用的重做日志文件。当最后一个可用的重做日志文件被填充时,LGWR返回到第一个重做日志文件并写入它,再次启动周期。图12-1显示了重做日志文件的循环写入。每行旁边的数字表示LGWR写入每个重做日志文件的顺序。

根据是否启用归档,填充的重做日志文件可供LGWR重复使用。

  • 如果禁用了存档(数据库处于NOARCHIVELOG模式),则写满的重做日志文件在其中记录的更改已写入数据文件后可用。
  • 如果存档已启用(数据库处于ARCHIVELOG模式),则在LGWR中记录的更改已写入数据文件并且文件已存档后,可以使用写满的重做日志文件。

Figure 12-1 Reuse of Redo Log Files by LGWR

活动(当前)和非活动重做日志文件

Oracle数据库一次仅使用一个重做日志文件来存储从重做日志缓冲区写入的重做记录。 LGWR正在积极写入的重做日志文件称为当前重做日志文件。

实例恢复所需的重做日志文件称为活动重做日志文件。实例恢复不再需要的重做日志文件称为非活动重做日志文件。

如果已启用存档(数据库处于ARCHIVELOG模式),则数据库无法重新使用或覆盖活动的联机日志文件,直到其中一个归档后台进程(ARCn)归档其内容。如果禁用了存档(数据库处于NOARCHIVELOG模式),那么当最后一个重做日志文件已满时,LGWR将继续在序列中的下一个日志文件变为非活动状态时覆盖该日志文件。

日志切换和日志序列号

日志切换是数据库停止写入到一个重做日志文件并开始写入另一个日志文件的位置。通常,当当前重做日志文件被完全填满并且写入必须继续到下一个重做日志文件时,会发生日志切换。但是,无论当前重做日志文件是否完全填满,您都可以将日志切换配置为定期执行。您也可以手动强制日志切换。

每次发生日志切换时,Oracle数据库都会为每个重做日志文件分配一个新的日志序列号,并且LGWR开始写入日志序列号。当数据库归档重做日志文件时,归档日志保留其日志序列号。重新使用的重做日志文件是下一个可用的日志序列号。

每个联机或归档重做日志文件都由其日志序列号唯一标识。在崩溃,实例或介质恢复期间,数据库通过使用必需的归档日志文件和重做日志文件的日志序列号,按升序正确应用重做日志文件。

 

参考资料

https://docs.oracle.com/cd/E11882_01/server.112/e25494/onlineredo.htm#ADMIN11302

posted @ 2018-06-26 16:53  ZeroTiny  阅读(3545)  评论(0编辑  收藏  举报