Oracle 12c云数据库备份与恢复技术
上QQ阅读APP看书,第一时间看更新

1.4.4 联机重做日志文件

Oracle联机重做日志文件(Online Redo Log File)中以重做记录的形式记录了用户对数据库进行的所有修改操作。重做记录由一组变更向量组成,每个变更向量中记录了事务对数据库中某个数据块所做的修改。

利用重做记录,在系统发生故障而导致数据库崩溃时,Oracle可以恢复丢失的数据修改操作信息;同时能够恢复对撤销段所做的修改操作。在进行数据库恢复时,Oracle会读取每个变更向量,然后将其中记录的修改信息重新应用到相应的数据块上。因此,重做日志文件不仅能够保护用户数据,还能够保护回滚(或撤销)数据。

1.联机重做日志的结构

重做记录包含对数据库修改时的元数据信息:SCN号和变化的时间戳(Time Stamp);修改事务的事务ID;如果事务提交了,提交时的SCN和时间戳;产生变化的操作类型;被修改数据段的名称和类型。

2.写入联机重做日志文件

数据库实例的联机重做日志也称重做线程。在单实例配置中,只有一个实例访问数据库,所以只有一个重做线程。在Oracle RAC配置中,有两个或多个实例并行访问数据库,每个实例都有独立的重做线程。每个实例中的重做线程读写各自的联机重做日志文件。

每个数据库至少有两个联机重做日志文件,一个用于记录重做记录,一个用于归档(在ARCHIVELOG模式下)。在任何时刻,Oracle只使用一个联机重做日志文件。当前正在被LGWR进程所用的联机重做日志文件称为活动重做日志文件或当前重做日志文件(Active Online Redo Log Files)。

Oracle是以循环方式来使用联机重做日志文件的。重做记录以循环方式在SGA区的重做日志缓存中进行缓存,然后由Oracle实例的后台进程LGWR以循环方式写入联机重做日志文件中。如果当前重做日志文件已被写满,那么LGWR进程继续使用下一个可用的重做日志文件。如果最后一个可用的重做日志文件也被写满,那么LGWR进程将重新写入第一个重做日志文件。

当一个事务被提交时,LGWR进程把与该事务相关的所有重做记录全部写入当前重做日志文件中,同时生成一个系统变更号(System Change Number,SCN)。系统变更号与重做记录一起保存在重做日志文件中,用来标识与重做记录相关的事务。只有当某个事务所产生的重做记录全部被写入重做日志文件之后,Oracle才认为这个事务已经成功提交。SCN是数据库状态是否一致的标志。

在非归档模式(NOARCHIVELOG)下,写满的重做日志文件在其中的修改信息全部写入数据文件后就立即变成可重新使用;而在归档模式(ARCHIVELOG)下,写满的重做日志文件只有将其中的修改全部写入数据文件并且归档完成后才可以重新使用。

重做记录中记载的是事务对数据修改的结果。回滚条目中记录的是事务进行修改之前的数据。如果用户在事务提交之前想撤销事务,Oracle将通过回滚条目来撤销事务对数据所做的修改,也可以使用闪回技术来恢复某些操作。

3.日志切换和日志序列号

(1)日志切换

日志切换是指LGWR进程结束当前重做日志文件的使用,开始写入下一个重做日志文件的过程。通常只有在当前重做日志文件被写满时才会发生日志切换,但是,管理员可以设置在指定时间进行日志切换,甚至在必要时还可以用手工方式强制进行日志切换。

(2)手工日志切换

进行手工日志切换的用户必须具有ALTER SYSTEM系统权限,然后执行带SWITCH LOGFILE子句的ALTER SYSTEM命令即可:

(3)日志序列号

每当日志切换发生时,数据库就会生成一个新的日志序列号,并将这个号码分配给即将开始使用的重做日志文件。如果数据库处于归档模式中,在归档重做日志文件时,日志序列号将随同重做日志文件一同保存在归档日志文件中。

日志序列号不会重复,同一个重做日志文件在不同的写入循环中使用时,将赋予不同的日志序列号。

每个联机或归档的重做日志文件通过分配给它的唯一日志序列号来进行标识。进行数据库恢复时,Oracle通过识别日志文件的序列号,能够按照先后次序正确地使用这些重做日志文件。

4.多路重做日志文件

多路重做日志文件是指同时保存一个重做日志文件的多个镜像文件,这样可以防止重做日志文件被破坏。这些完全相同的重做日志文件构成一个重做日志文件组,组中每个重做日志文件称为一个日志组成员,每个组有一个编号。重做日志组中的所有成员必须具有相同的大小和完全相同的内容。同一组中的不同重做日志文件通常分别存放在不同磁盘上。

在使用多路重做日志文件的情况下,LGWR进程同步地写入相互镜像的一个日志组中的多个重做日志文件,这样就能保证某个重做日志文件被破坏后,数据库仍然能够不受影响地继续运行。

5.查询重做日志信息

在管理数据库或恢复数据库的过程中,经常要了解日志文件的状态、SCN号等信息。记录重做日志信息的动态性能视图有V$LOG、V$LOGFILE和V$LOG_HISTORY。

(1)V$LOG动态性能视图

V$LOG中记录从控制文件中读取的所有重做日志文件组的基本信息。

(2)V$LOGFILE动态性能视图

V$LOGFILE包括每个成员日志文件的基本信息,包括成员日志文件的状态、重做日志组号、成员文件名称等信息。