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

1.4.5 归档重做日志文件

Oracle以循环方式将数据库修改信息保存到重做日志文件中,在重新写入同一重做日志文件时,原来保存的重做记录将被覆盖。如果能够将所有重做记录永久地保留下来,就可以完整地记录数据库的全部修改过程,从而可以用它们进行数据库恢复。

归档(Archive)是指在重做日志文件被覆盖之前,Oracle将已经写满的重做日志文件复制到指定的位置以文件形式存放的过程。归档后的日志文件称为归档重做日志文件(Archived Redo Log Files)。归档重做日志文件是已经写满的重做日志组的成员的一个精确复制文件,其中不仅包括所有的重做记录,而且包含重做日志文件的日志序列号。

归档重做日志文件主要用于进行数据库恢复和更新备份数据库,同时借用LogMiner工具可以得到数据库操作的历史信息。

1.归档过程

只有数据库处于归档模式中,才会对重做日志文件执行归档操作。归档操作可以由后台进程ARCn自动完成,也可以由管理员手工通过命令来完成。

LGWR后台进程负责写入联机重做日志文件,当联机重做日志文件写满后,由ARCn后台进程将联机重做日志文件的内容复制到归档重做日志文件中。如果联机重做日志组中第一个文件损坏,那么ARCn会将同组中的另一个文件进行归档。

2.数据库的归档模式

数据库的归档模式是指数据库是否进行归档的设置。数据库可以运行在归档模式(ARCHIVELOG)或非归档模式(NOARCHIVELOG)下。数据库的归档模式记录在控制文件中。

如果将数据库设置为非归档模式,Oracle将不会对重做日志文件进行归档操作。当发生日志切换时,LGWR进程直接写入下一个可用的联机重做日志文件,联机重做日志文件中原有的重做记录将被覆盖。

由于在非归档模式下没有保留被覆盖的重做日志,因此对数据库操作有如下限制:

①数据库只具有从实例崩溃中恢复的能力,而无法进行介质恢复。

②只能使用在非归档模式下建立的完全备份来恢复数据库,并且只能恢复到最近一次进行完全备份时的状态下,而不能进行基于时间的恢复。因此,在非归档模式下,管理员必须经常定时地对数据库进行完全备份。

③不能够进行联机表空间备份操作,而且在恢复时也不能够使用联机归档模式下建立的表空间备份。

如果数据库设置为归档模式,Oracle将对重做日志文件进行归档操作。LGWR进程在写入下一个重做日志文件之前,必须等待该联机重做日志文件完成归档,否则LGWR进程将被挂起,数据库也停止运行。

在归档重做日志文件中,记录了自从数据库置于归档模式后,用户对数据库所进行的所有修改操作。

数据库处于归档模式下具有以下优点:

①当发生介质故障时,使用数据库备份和归档重做日志,能够恢复所有提交的事务,保证不会丢失任何数据。

②利用归档重做日志文件,可以使用在数据库打开状态下创建的备份文件来进行数据库恢复。

③如果为当前数据库建立了一个备份数据库,通过持续地为备份数据库应用归档重做日志,可以保证源数据库与备份数据库的一致性。

3.切换数据库的归档模式

改变数据库的归档模式要有管理员的权限,即以AS SYSDBA连接数据库。改变数据库归档模式之前,数据库必须先关闭并且停止相关的实例。如果有数据文件需要介质恢复,就不能进行从NOARCHIVELOG到ARCHIVELOG的转换。数据库改变到归档模式后通常要重新关闭,然后对数据库进行备份。

(1)从非归档模式到归档模式的切换

手工从非归档模式到归档模式的切换步骤如下:

①关闭数据库。

②备份数据库。

③编辑初始化参数文件中与归档相关的初始化参数。通常主要是设置归档位置和归档文件名的格式,也可以直接使用这些参数的缺省值。

④重新启动实例到加载状态,但是不打开数据库。

⑤切换数据库到归档模式,然后再打开数据库。

(2)切换数据库到非归档模式

①关闭数据库。

②启动数据库实例到装载状态,但不打开数据库。

③切换数据库到非归档模式并打开数据库。

4.手工归档

在归档模式下,无论是否激活自动归档功能,管理员都可以执行手工归档操作。在下面情况下可能要进行手工归档:

①如果自动归档功能被禁用,管理员必须定时对填满的联机重做日志组进行手工归档。如果所有的联机重做日志文件被填满而没有归档,那么LGWR无法写入处于不活动状态的联机重做日志文件,此时数据库将被暂时挂起,直到完成必要的归档操作为止。

②虽然启用了自动归档功能,但管理员想将处于INACTIVE状态的重做日志组重新归档到其他位置。

如果要将所有未归档且写满的重做日志文件进行归档,那么可以执行下面的语句:

如果要将当前的联机重做日志文件进行归档,并进行日志切换,那么可以执行下面的语句:

如果在上面的语句中指定NOSWITCH子句,那么仅归档但不进行日志切换。

如果要将指定的重做日志文件进行归档,那么可以执行下面的语句:

如果要将包含指定日志记录(SCN号为9356083)的重做日志文件进行归档,那么可以执行下面的语句:

在上面的几个例子中,都可以指定“TO路径\文件名”来表示归档的位置。如果没有TO子句,那么将归档到初始化参数LOG_ARCHIVE_DEST或LOG_ARCHIVE_DEST_n指定的位置。

手工归档也可以使用SQL * Plus的ARCHIVE LOG命令来完成。下面的命令将所有未归档的联机重做日志进行归档,归档位置由初始化参数决定:

下面的命令将所有未归档的联机重做日志文件归档到指定位置:

5.查看归档日志信息

可以通过数据字典视图和动态性能视图或者ARCHIVE LOG LIST命令来查询有关归档的信息。记录有归档信息的动态性能视图有V$DATABASE、V$ARCHIVED_LOG、V$ARCHIVE_DEST、V$ARCHIVE_PROCESSES、V$BACKUP_REDOLOG、V$LOG和V$LOG_HISTORY。

(1)ARCHIVE LOG命令

ARCHIVE LOG LIST是SQL * Plus环境中的命令,可以显示当前连接实例的归档重做日志文件信息。

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

通过查询V$DATABASE动态性能视图可以显示数据库是否处于归档模式。

(3)V$ARCHIVED_LOG动态性能视图

该动态性能视图从控制文件中获取已归档日志的信息,包括归档目标名称等。

(4)V$ARCHIVE_DEST动态性能视图

该动态性能视图显示所有归档目标的位置和状态等信息。

(5)V$LOG_HISTORY动态性能视图

该动态性能视图从控制文件中获得重做日志历史信息。