理论教育 重做日志基本概念|Oracle数据库管理

重做日志基本概念|Oracle数据库管理

时间:2023-10-30 理论教育 版权反馈
【摘要】:重做日志记录对数据库所作的所有修改,同时还保护还原数据。也就是说,在一组重做日志内,只要有一个成员可以正常写入,就不会影响Oracle数据库的运行。该命令的输出结果说明当前数据库有3组重做日志文件,它们的日志序列号分别为149、150、151,而LGWR当前正在写入的联机重做日志文件组的日志序列号是151。新添加的重做日志文件组,或者被清空之后的重做日志文件组处于该状态。

重做日志基本概念|Oracle数据库管理

重做日志记录对数据库所作的所有修改,同时还保护还原数据。所以,如果重做日志得到完整保存,无论在数据库出现实例故障还是介质失败时,只要重新读取重做日志,把它们再次应用到相关的数据块中,即可重构对数据库所作的所有修改(包括还原段),将数据库恢复到故障前的状态。

(1)重做日志的内容

重做日志由重做记录(也被称为重做项)组成,重做记录又由一组修改矢量组成,每个修改矢量描述数据库中单个数据块上所发生的改变,它记录的信息包括:

①修改的SCN和时间戳。

②产生这些修改的事务的标识号。

③事务提交时的SCN和时间戳(如果事务已提交)。

④产生这些修改的操作类型。

⑤被修改数据段的名称和类型。

例如,在调用UPDATE语句修改dept表中的dname(部门名称)列时,重做记录中的修改矢量将描述该表数据段中数据块、还原段中数据块,以及还原段事务表的改变。

(2)重做日志的写入方式

1)重做日志缓冲区

用户执行数据库操作时,服务器进程把重做记录从用户内存空间复制到SGA,它们首先被缓存在SGA的重做日志缓冲区内,之后再由Oracle数据库的后台进程日志写入进程(LGWR)把它们写入联机重做日志文件。这样做可以减少重做日志文件写入的物理I/O次数,提高系统的性能。

当LGWR把重做记录从日志缓冲区写入联机重做日志文件后,服务器进程即可把新的重做记录复制到日志缓冲区内已写入联机重做日志文件的那些重做记录上。Oracle把重做日志缓冲区看作一个圆形区域,所以可以循环连续写入。

2)日志写入进程与联机重做日志文件

LGWR在下述情况下把重做日志缓冲区内缓存的重做记录写入联机重做日志文件:

①用户提交事务时。

②联机重做日志切换时。

③LGWR上次写入3 s之后。

④重做日志缓冲区达到1/2满,或者缓存的重做日志达到1 MB时。

⑤DBWn把脏数据块写入数据文件之前。

每个数据库实例必须至少有两组联机重做日志文件,这样才能保证一组文件当前处于写入状态(这组重做日志文件被称为当前重做日志文件),而另一组已写过的日志文件用于归档操作(当数据库处于归档模式时)。

鉴于联机重做日志文件的重要性,像控制文件一样,Oracle数据库也支持联机重做日志文件的多路存储。也就是在一组重做日志文件内可以创建多个日志文件成员,把它们分布在不同的物理硬盘上,使它们互为镜像,从而避免出现硬盘单点故障而导致重做日志文件的丢失现象。

在写入时,LGWR将同步写入联机重做日志文件组内的各个成员。如果其中的某个日志文件成员不可访问,LGWR将把该成员的状态标识为INVALID(无效),并把该错误记录在LGWR跟踪文件和数据库警告日志文件内,之后LGWR忽略该成员,继续将重做日志写入该组内的其他成员文件中。也就是说,在一组重做日志内,只要有一个成员可以正常写入,就不会影响Oracle数据库的运行。这一点与控制文件的多路存储不同:控制文件多路存储时,只要任意一个控制文件损坏,Oracle数据库就不能继续运行。

如果一组重做日志内的所有成员文件全部损坏,将会导致数据库实例关闭。

3)日志切换与日志序列号

日志切换是指LGWR停止写入一组联机重做日志文件,而开始写入下一组重做日志文件这一操作。Oracle数据库以循环方式使用各组重做日志文件。当发生日志切换,LGWR开始写入下一组可用的重做日志文件,当最后一组可用的重做日志文件填满后,又切换回第一组重做日志文件开始写入,如此循环。

当日志切换到一组重做日志时,如果Oracle实例还没有完成对这组重做日志的归档操作,这将导致Oracle数据库挂起,等待该组重做日志归档完成后才能继续运行。

通常情况下,LGWR写满一组联机重做日志文件时发生日志切换。但是,作为管理员,在需要对当前重做日志文件进行维护,或者需要归档当前重做日志文件时,也可以执行下述命令强制要求Oracle数据库实例立即进行日志切换。

除此之外,设置Oracle数据库的初始化参数ARCHIVE_LAG_TARGET,可以使Oracle实例定期进行日志切换。默认情况下,该参数的值为0,说明禁用基于时间的日志切换功能。把它设置为大于0的值时,则要求实例每过多少秒定期进行一次日志切换。例如,执行下面语句后,Oracle实例将每30 min执行一次日志切换。

在主/备数据库环境中定期进行日志切换有助于把主数据库上产生的归档日志及时传递给备用数据库,使备用数据库得到及时更新。

每当发生日志切换时,Oracle数据库赋予准备写入的重做日志组一组新的日志序列号,之后LGWR才开始写入它。归档进程在归档重做日志时会保留日志序列号。日志序列号唯一地标识联机和归档重做日志文件。Oracle在执行实例或介质恢复时,将按照日志序列号而不是日志文件名称判断需要使用哪个联机重做日志文件或归档重做日志文件恢复数据库。

在SQL∗Plus下,可以使用下述命令查看数据库各组联机重做日志文件的日志序列号。

该命令的输出结果说明当前数据库有3组重做日志文件,它们的日志序列号分别为149、150、151,而LGWR当前正在写入的联机重做日志文件组的日志序列号是151。除此之外,还可以从动态性能视图中查询各组重做日志的日志序列号。例如,下面语句的查询结果说明数据库3组重做日志文件的日志序列号分别为149、150和151。

4)重做日志文件组的状态

重做日志文件组的状态分为以下几种。(www.daowen.com)

①ACTIVE:有效状态,指实例恢复时需要使用这组联机重做日志文件。

②CURRENT:当前状态,指LGWR当前正在写入这组联机重做日志文件,实例恢复时也需要用到它们。

③INACTIVRE:无效状态,指实例恢复时不再需要这组重做日志文件。

④CLEARING:在执行ALTER DATABASE CLEAR LOGFILE语句后,系统正在清除重做日志文件中的内容。

⑤UNUSED:未使用过。新添加的重做日志文件组,或者被清空之后的重做日志文件组处于该状态。

重做日志文件组的状态可以从动态性能视图v log中检索。例如,下面语句的执行结果说明当前数据库实例拥有3组重做日志文件,其中第1组为当前重做日志文件组,第2组和第3组处于INACTIVE状态。

接下来强制执行日志切换,之后再查询,可以看到第2组重做日志成为当前重做日志。

系统已更改。

5)归档进程与归档重做日志文件

Oracle数据库可以运行在以下两种模式下。

①ARCHIVELOG:归档模式;

②NOARCHIVELOG:非归档模式。

二者的唯一差别是在LGWR需要重新使用联机重做日志文件时,对其中原来填充的重做日志的处理方法。在归档模式下,只有在原来的重做日志得到复制归档之后,LGWR才能重新使用该组重做日志文件。而在非归档模式下则无此限制,LGWR在需要重新使用重做日志文件时可以直接覆盖原来的重做日志。

由于非归档模式下没有完整保存Oracle数据库的所有重做日志,所以当出现介质故障时,数据库无法恢复到故障发生时的状态。正因如此,在实际生产环境中,通常都将Oracle数据库设置为归档模式。

要查看Oracle数据库的运行模式,可以使用本节前面的SQL∗Plus命令ARCHIVE LOG LIST,也可以查询动态性能视图v database的log_mode列。例如,下面命令查询到orcl数据库当前运行在归档模式,这与前面SQL∗Plus命令的结果一致。

Oracle数据库运行在归档模式时,发生日志切换后,归档进程(ARCn,n为归档进程编号,它可以是0~9,a~t,也就是说Oracle实例中允许启动多达30个归档进程)将把填充过的联机重做日志文件复制到指定的一个或多个位置存储,为它们创建脱机副本,这一过程被称为归档,重做日志文件的这些脱机副本被称为归档重做日志文件。

在归档模式下,LGWR需要重新使用联机重做日志文件组时,如果它们还没有归档,会导致数据库的运行被暂时挂起。

归档分为自动归档和手工归档两种。启用自动归档后,后台进程ARCn在日志切换后自动完成归档操作。采用手工归档时,只有具有管理员权限,并且数据库处于MOUT或OPEN状态时才能执行归档。手工归档时调用的SQL语句为:

前者把所有填充过但还没有归档的重做日志文件组全部归档,而后者则只归档下一组填充过但还没有归档的重做日志文件。

需要注意的是,即使数据库运行在自动归档模式下,也可以使用下面ALTER SYSTEM ARCHIVE LOG语句把INACTIVE状态的联机重做日志文件重新归档到另一个位置。

6)重做日志从产生到归档的过程

综上所述,可以用图5.1简要说明Oracle数据库重做日志的产生、归档过程。首先,在用户执行数据库操作时,服务器进程把重做日志从用户内存区域复制到Oracle实例中的日志缓冲区。之后,在一定条件下,LGWR把重做日志缓冲区内的重做日志写入重做日志文件。最后,如果数据库运行在自动归档模式下,当发生日志切换时,归档进程将把填充过的重做日志文件组内容复制到归档日志文件中保存。

图5.1 重做日志产生的归档过程

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈