首页 > 代码库 > Managing the Redo Log-6.1、What Is the Redo Log?
Managing the Redo Log-6.1、What Is the Redo Log?
当前重做日志经常是在线的,所以type是online,它的类型和归档日志是不同的。所以在线重做日志简称重做日志。怎么在一个标准单实例配置和管理重做日志。
6.1、What Is the Redo Log?
恢复操作最重要的结构就是重做日志,它们保存了关于数据库所有更改。每个实例都有重做日志保护数据库,以防实例失败。
6.1.1、Redo Threads
每个数据库实例都有一个redo线程。典型配置中,只用一个数据库实例访问一个数据库,所以只有一个线程出现。在rac环境,两个或更多实例访问一个数据库,每个实例有一个redo线程。每个实例的redo线程避免重做日志单一集的竞争,由此排除一个潜在的性能瓶颈。
rac环境的重做日志,查看Oracle Database Oracle Clusterware and Oracle Real Application Clusters Administration and Deployment Guide
6.1.2、Redo Log Contents
每个重做日志保存了redo records。一条重做记录,也被称作重做条目,它是由一组change vectors(变更矢量)组成,每个变更矢量描述了每个块的改变。比如,改变employee表的salary字段的值,产生一条重做记录,其中的变更矢量描述了数据块、回滚块和回滚段中事务表的改变。重做记录中的数据被用作重建所有的变更,包括回滚段。所以,重做日志也保护回滚数据。当使用重做数据恢复数据库时,数据库读取变更矢量,把变更应用到相关的数据块。
重做记录用环形的方法缓存在sga的redo log buffer。lgwr把重做日志写入重做日志文件。当一个事务提交后,lgwr立刻把事务的重做记录从redo log buffer写入到重做日志文件,同时给这些重做记录分派一个scn(识别每个已提交事务的重做记录)。在相应的事务被提交前,重做记录也可以被写进重做日志。如果redo log buffer满了,此时另外一个事务提交,lgwr把在redo log buffer中的所有重做记录刷新到重做日志。如果需要,数据库会回滚重做日志中的异常记录。
6.1.3、How Oracle Database Writes to the Redo Log
数据库需要至少两个重做日志文件,当一个被归档时,另外一个被写入。lgwr写入重做日志使用循环的方式。当current重做日志满了,lgwr开始写入另外一个重做日志。满了的重做日志,lgwr是否可以重用,依赖于是否打开归档:
(1)未开启归档,记录到重做日志的变更都被写入数据文件,满了的重做日志立刻可以被重用
(2)开启归档,记录到重做日志的变更都被写入数据文件,同时重做日志被归档,满了的重做日志才能被使用
6.1.3.1、Active (Current) and Inactive Redo Log Files
在同一时刻,oracle只写入一个重做日志文件。lgwr正在写入的重做日志文件,称为当前重做日志文件(current)。需要用做实例恢复的重做日志文件,称为活动重做日志文件
(active)。不需要用做实例恢复的重做日志文件,称为非活动重做日志文件(inactive)。打开归档,活动重做日志文件直到被归档后,立刻状态变为inactive,才能被重用和覆盖。
6.1.3.2、Log Switches and Log Sequence Numbers
日志切换是一个点,lgwr停止写当前重做日志文件,开始写入一个新的重做日志文件。一般地,当当前重做日志文件满了,必须继续写入一个新的重做日志文件,发生日志切换。然而,你可以配置在规律的间隔内切换日志。也可以手动地强制日志切换。每次日志切换、lgwr开始写入一个新的重做日志文件时,数据库给该重做日志文件分派一个新log sequence number。当归档重做日志文件时,归档日志保存它的log sequence number。每个在线日志和归档日志是通过log sequence number被唯一识别。在崩溃恢复、实例恢复、介质恢复期间,数据库按照log sequence number的升序应用重做日志文件。