首页 > 数据库DBA > oracle知识 > 数据库原理 >

oracle的Redo Log重做日志介绍(官方原文的翻译)

作者: 初见博客 分类: 数据库原理 发布时间: 2021-07-13 17:48

什么是重做日志?

恢复操作最重要的结构是重做日志,它由两个或多个预先分配的文件组成,这些文件存储对数据库所做的所有更改。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 返回到第一个重做日志文件并写入它,再次开始循环。图 10-1说明了重做日志文件的循环写入。每行旁边的数字表示 LGWR 写入每个重做日志文件的顺序。

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

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

图 10-1 LGWR 重做日志文件的重用

admin054
“图10-1 LGWR重做日志文件的重用”说明

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

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

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

如果您已启用存档(数据库处于ARCHIVELOG模式),则在存档器后台进程 (ARC n ) 之一存档其内容之前,数据库无法重用或覆盖活动的联机日志文件。如果归档被禁用(数据库处于NOARCHIVELOG模式),那么当最后一个重做日志文件已满时,LGWR 继续覆盖第一个可用的活动文件。

日志开关和日志序列号

一个日志切换是在其数据库停止写入一个重做日志文件,并开始写作到另一个点。通常,当当前重做日志文件完全填满并且必须继续写入下一个重做日志文件时,会发生日志切换。但是,您可以将日志切换配置为定期发生,而不管当前重做日志文件是否已完全填满。您还可以手动强制切换日志。

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

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

英文原版链接:https://docs.oracle.com/cd/B28359_01/server.111/b28310/onlineredo001.htm#ADMIN11304

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注