【数据库】Oracle重做日志文件

重做日志文件

重做日志文件时为了数据库恢复的物理文件,其中保存了数据库的变更操作信息。

一、概述

重做日志文件(Redo Logfile)又被称为事务日志文件(Transaction Logfile)。

它对ORACLE数据库来说至关重要。ORACLE中每执行一条更新操作时,都会引起数据库的变化,因此都会生成一定数量的重做日志,他们将被记录到重做日志文件中。以便在数据库出现例程失败或介质故障时,可以利用重做日志文件来恢复数据库

重做日志文件是ORACLE三类文件中最为复杂的一类。在ORACLE 10G安装完毕后,会自动创建3个重做日志文件。

  1. 重做日志文件主要以重做记录的形式记录、保存对数据库所作的修改(或事务)

  2. 如果在一段时间内只对数据库进行了查询操作,则不产生重做日志记录信息。

  3. 如果对一个表的数据进行了修改,并完成了事务的提交,这时数据文件只存储修改后的数据,但重做日志文件中要记录两类数据:

    1. 一类是修改前的数据;
    2. 一类是修改后的数据。

    所以重做日志文件的管理方式与数据文件的管理方式有所不同

二、作用与目的

重做日志文件在数据库的恢复过程中起着非常重要的作用,可以用来进行例程和介质恢复(其中介质恢复需要借助于归档日志文件),以及事务的撤销。

  • 重做日志文件是为了数据库恢复的物理文件,其中保存了数据库的变更操作信息。
  • 通过重做日志文件通常是通过重做(REDO)或者是回退(UNDO)实现的。
  • 重做(REDO)就是有些原因到导致事务对数据库的操作的修改在写入数据文件之前丢失了,此时就可以利用重做日志文件做该事务对数据库的变更。
  • 回退(UNDO)如果用户在事务提交之前想回滚事务,那么可以利用重做日志文件撤销事务对数据库所做的变更。

三、工作原理

重做日志文件记录所有对数据的改变,并提供由系统或媒体失败带来的恢复机制。

每个数据库至少有两个重做日志文件,采用循环写的方式进行工作。这样就能保证当一个重做日志文件在进行归档时,还有另一个重做日志文件可用。当一个重做日志文件被写满后,后台进行就开始写下一个重做日志文件。当所有的重做日志文件都写满后,LGWR进程再重新开始写入第一个重做日志文件,开始新的循环。

通常LGWR进程再开始下一个重做日志之前要确定: 该重做日志文件中的所有重做记录所对应的变更操作结果必须全部写入数据文件中。如果数据库处于“归档模式”,要确定对该重做日志文件进行了归档。


重做日志写进程(LGWR)在任意时刻只能写一组重做日志组,LGWR后台进程正在写的重做日志组叫做当前重做日志组。

  • LGWR将完全相同的信息从重做日志缓冲区复制到改组的每个重做日志文件中。
  • LGWR是以循环的方式写重做日志组的,当写满一个重做日志组时,就会开始写下一组重做日志,这称为日志切换,当写满最后一组时,LGWR又开始写第一组重做日志。
    • 这被称为日志切换
    • 检查点操作也产生
    • 信息被写入控制文件
  • 如果数据库运行在归档模式下(oracle默认为非归档模式),当LGWR的写操作从一个重做日志组切换到下一个重做日志组后,归档写进程(ARCH/ARCH0)就会将原来的重做日志文件中的信息复制到归档日志文件中。
  • oracle服务器保证在归档写进程没有将重做日志文件中的信息复制到归档日志文件中之前,LGWR进程不能再写这组重做日志。

1. 重做日志文件的写入

  • 为保证数据库是可以恢复的,写入重做日志文件时必须遵守如下两个原则:
  1. 写入的次序要严格按并发事务的执行次序;
  2. 必须先写入重做日志文件再写入数据文件。
  • 循环写入
  • 日志切换或日志序列号
  • 检查点

2. 强迫日志切换和启动检查点

  1. 日志切换

    可以使用ALTERSYSTEM SWITCH LOGFILE命令来启动

  2. 启动检查点

    • 设置fast_start_mttr_target参数

    • ALTER SYSTEM CHECKPOINT命令

    • ALTER SYSTEM CHECKPOINT

3. 启动检查点进程的时机

  1. 重做日志切换

    即当一组重做日志写满时切换到下一组重做日志时。

  2. 关闭数据库

    使用NORMAL,TRANSACTIONAL,IMMEDIATTE选项关闭数据库时,启动检查点。

  3. 表空间脱机或被设置成BACKUP模式

  4. 手动检查点

    可以使用ALTER SYSTEM CHRCKPOINT手动设置一个检查点

  5. 时间检查点

    每隔多长时间执行一次检查点。可以通过调整LOG_CHECKPOINT_TOMEOUTLOG_CHECKPOINT_INTERVAL参数来改变检查点执行的间隔。调整时小心,不要让间隔时间太长,也不要添加不必要的检查点。

  6. 初始化参数LOG_CHECKPOINT_TO_ALTER

    如果将设置成TRUE,则关于每个检查点的信息都将被记录到预警日志文件中。该参数默认值是FALSE,表示不记录检查点的信息。如果在预警日志文件中看到关于检查点没有完成的信息,就应该给数据库添加新的重做日志文件,这样会给检查点的完成提供更多的时间,也保证了检查点产生的不是很频繁。

四、概述重做日志文件的结构

当写满一个重做日志组时,就会开始写下一组重做日志。当写满最后一组时,LGWR又开始写第一组重做日志。

重做日志文件的结构

重做记录

重做记录

重做日志文件是由一条一条重做记录组成的,重做记录(REDO RECORD)是有一个个修改向量(CHANGE VECTOR)组成的。每个修改向量记录了对数据库中的某个数据块所作的修改。
重做记录记录了可以用来对数据可进行恢复的所有修改的数据,包括回退段。因此,重做日志文件同样也会保护回退数据。当使用重做日志文件来进行数据库恢复时,ORACLE将读取其中的重做记录(包括其中的修改向量),并且将这些修改用于相关的块中。
在ORACLE中,对数据库所作的修改实际上都是先在内存中进行的。当满足一定条件时先将修改操作产生的在SGA区的重做日志高速缓存中的修改结果,以重做记录的形式成批的写入重做日志文件中(此时就认为该事务已成功提交,因为此时可以进行事务的回退了,这种机制被称为“快速提交",然后才将内存中的在SGA区的数据告诉缓存中的修改结构成批的写入数据文件进行永久保存。因此,只要某项修改操作的重做记录没有丢失,就可以通过重做记录来恢复该项的修改操作。
在相应的数据提交之前,重做记录也可以被写入到重做日志文件中。如当SGA区的重做日志告诉缓存已经填满,或者提交了另一个事务,那么即使某些重做记录还没有提交,LGWR也会将重做日志缓存区中的所有重做记录全部写入到某个重做日志文件中,以便获得更多的空闲空间。这样,如果需要,ORACLE就可以回退这些修改了。

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欧恩意

如有帮助,感谢打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值