Oracle redo重做日志工作原理及引入目的

Oracle 为何引入重做日志?

答案:数据恢复

        在数据库运行过程中,永辉更改的数据暂时存放在数据库高速缓冲区中,而为了提高写数据库的速度,不是一旦有数据变化,就把变化的数据写到数据文件中,频繁的读写磁盘文件使得数据库系统效率降低,所以,要等到数据库高速缓冲区中的数据达到一定的量或者满足条件时,DBWR进程才会将变化了的数据提交到数据库中,也就是dbwr将变化了的数据写到数据文件中。这种情况下,如果在DBWR把变化了的更改写到数据文件之前宕机,那么数据库高速缓冲区中的数据就全部丢失,如果在数据库重新启动后无法将这部分用户提交的提交更改的数据,显然是不合适的。

        而重做日志就是把用户变化了的数据先保存起来,其中LGWR进程负责把用户更改的数据优先写到重做日志文件中。在数据库原理课程中,这种机制也叫作日志优先。这样在数据库重新启动时,数据库系统会从重做日志中读取这些变化了的数据,将数据提交到数据库中,写入数据文件。

       为了提高磁盘效率,并为了防止重做日志文件的损坏,Oracle引入了一种重做日志结构。

      在上面的图中,重做日志文件结构由三个重做日志组组成,每个重做日志组有两个重做日志成员,也可以有更多的重做日志成员。数据库系统会优先使用重做日志组1,该组写满后,就可以切换到重做日志组2,再写满后,继续切换到重做日志组3,然后循环使用重做日志组1,oracle以这样循环的方式使用重做日志组。

        oracle规定每个数据库实例至少要有两个重做日志组,每个重做日志组至少有一个重做日志成员。当重做日志组中有多个日志成员时,每个重做日志成员的内容相同,oracle会同步一个同坐日志组中的每个成员。在工作的过程中,oracle循环地使用重做日志组,当一个重做日志组写满时,就自动进行日志切换,切换到他可以找到其他的重做日志组,并为该日志组设置一个日志序列号。在必要的情况下也可以实现强制日志切换。

        如果没有启动归档日志,当一个循环结束,再次使用先前的重做组时,会以覆盖的形式向该组的重做日志文件中写数据。在非归档模式下,在重新使用新的联机重做日志前,DBWR进程需要将所有的数据更改写入到数据文件中,这时也称为DBWR归档。所以,对于生产数据库要求工作在归档模式下。

        如果数据库处于归档模式下,当前正在使用的重做日志写满后,oracle会关闭当前的日志文件,arch进程把旧的重做日志文件中的数据移动到归档重做日志文件中。归档完成后,寻找下一个可重做日志组,找到该日志组中的可用的日志文件,打开该文件并写入实现写操作。归档进程并不是一直存在。

        attention!!

        如果数据库处于归档模式,在归档进程ARCH把联机重做日志移动到归档日志前,oracle无法使用一个已经关闭的重做日志。即如果ARCH没有完成,就没有已经归档的联机重做日志可用于切换,只有ARCH释放了联机重做日志后,数据库才可以继续工作。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

NARISU_JIN

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值