浅谈在Oracle中如何利用REDO实现故障恢复 

在数据库中,Redo的功能主要通过3个组件来实现:Redo Log Buffer、LGWR后台进程和Redo Log File(在归档模式下,Redo Log File最终会写出为归档日志文件)。

在Oracle的SGA中,存在一块共享内存,称为Redo Log Buffer,如图1所示。

图1 Oracle Instance

Redo Log Buffer位于SGA之中,是一块循环使用的内存区域,其中保存数据库变更的相关信息。这些信息以重做条目(Redo Entries)形式存储(Redo Entries也经常被称为Redo Records)。Redo Entries包含重构、重做数据库变更的重要信息,这些变更包括INSERT、UPDATE、DELETE、CREATE、ALTER或者DROP等。在必要的时候Redo Entries被用于数据库恢复。

Redo Entries的内容被Oracle数据库进程从用户的内存空间复制到SGA中的Redo Log Buffer之中。Redo Entries在内存中占用连续的顺序空间,由于Redo Log Buffer是循环使用的,Oracle通过一个后台进程LGWR不断地把Redo Log Buffer的内容写出到Redo Log File中。

当用户在Buffer Cache中修改数据时,Oracle并不会立即将修改数据写出到数据文件上,因为那样做效率会很低,到目前为止,计算机系统中最繁忙的部分是磁盘的I/O操作,Oracle这样做的目的是为了减少IO的次数,当修改过的数据达到一定数量之后,可以进行高效地批量写出。

大部分传统数据库(当然包括Oracle)在处理数据修改时都遵循no-force-at-commit策略。也就是说,在提交时并不强制写。那么为了保证数据在数据库发生故障时(例如断电)可以恢复,Oracle引入了Redo机制,通过连续的、顺序的日志条目的写出将随机的、分散的数据块的写出推延。这个推延使得数据的写出可以获得批量效应的性能提升。

同Redo Log Buffer类似,Redo Log File也是循环使用的,Oracle允许使用最少两个日志组。缺省情况下,数据库创建时会建立3个日志组。

SQL> select group#,members,status from v$log; 

GROUP# MEMBERS STATUS

---------- ---------- ----------------

1 1 INACTIVE

2 1 CURRENT

3 1 INACTIVE

当一个日志文件写满之后,会切换到另外一个日志文件,这个切换过程称为Log Switch。Log Switch会触发一个检查点,促使DBWR进程将写满的日志文件保护的变更数据写回到数据库。在检查点完成之前,日志文件是不能够被重用的。

由于Redo机制对于数据的保护,当数据库发生故障时,Oracle就可以通过Redo重演进行数据恢复。那么一个非常重要的问题是,恢复应该从何处开始呢?

如果读取的Redo过多,那么必然导致恢复的时间过长,在生产环境中,我们必需保证恢复时间要尽量得短。Oracle通过检查点(Checkpoint)来缩减恢复时间。回顾一下第1章中所提到的内容:检查点只是一个数据库事件,它存在的根本意义在于减少恢复时间。

当检查点发生时(此时的SCN被称为Checkpoint SCN)Oracle会通知DBWR进程,把修改过的数据,也就是此Checkpoint SCN之前的脏数据(Dirty Buffer)从Buffer Cache写入磁盘,在检查点完成后CKPT进程会相应地更新控制文件和数据文件头,记录检查点信息,标识变更。

在检查点完成之后,此检查点之前修改过的数据都已经写回磁盘,重做日志文件中的相应重做记录对于崩溃/实例恢复不再有用。如果此后数据库崩溃,那么恢复只需要从***一次完成的检查点开始恢复即可。如果数据库运行在归档模式(所有生产数据库,都建议运行在归档模式),日志文件在重用之前必须写出到归档日志文件,归档日志在介质恢复时可以用来恢复数据库故障

一、UNDO的使用说明

二、Undo段

在一个进程修改数据库过程中存放旧的数据,包括数据没有修改之前的位置和值。Undo段的头包含了一个事物处理表,表中存放了目前使用undo段事物处理的信息。一个系列的事物处理只使用一个undo段存放undo数据。多个并行事物处理可以同时写入一个undo段。

三、Undo段的作用

1、事务处理rollback

当一个事物处理修改了表中的一行,旧数据的映像就会存放在undo段中。如果事物处理rollback,Oracle Server就使用undo段中值再写回修改行。

2、事物处理恢复

当一个例程失败而还有一些事物处理没有完成,Oracle Server在数据库再次打开的时候就需要将所有没有提交的修改全部undo。这种rollback是事物处理恢复的一部分。由于undo段的修改也会被redo日志文件保护,因此恢复是能够进行的。

3、读取的一致性

当一个事物处理正在运行,其他的用户是不能看到任何这个事物处理没有提交的修改的。另外,在一个查询执行期间的数据改变是不应该显示在这个查询结果当中的。在undo段中的旧的数据(Undo数据)也为用户特定查询提供一个一致的映像。

四、读取的一致性

1、即使其他的事物处理修改了数据,Oracle Server也会保证一个查询看到的数据是一致的。当Oracle Server开始执行一个select查询,它将记录目前系统更改编号(SCN)并且确保这个SCN以后的任何数据修改将不会影响到这个查询结果。比如一个运行时间非常长的查询语句在执行过程中有发生了几个修改,如果一行数据在查询声明以前的修改没有提交,Oracle Server将从undo段中提取没有修改的以前的映像,并构建一个“读取一致”的行映像。

2、事物处理读取一致性

读取的一致性通常是指SQL查询语句。但是也可以通过在紧跟在事物处理声明后使用一下命令来使事物处理的读取也是一致的:

SET TRANSACTION READ ONLY;

或者可以在事物处理使用DML语句的时候在事物处理前面使用一下命令:

SET TRANSACTION ISOLATION LELVEL SERIALIZABLE;

使用上述两种方法都可以保证事物处理在数据读取时候的一致性,但是使用SERIALIZABLE参数将影响性能。

【编辑推荐】

  1. 优化数据库大幅度提高Oracle的性能
  2. 浅谈Oracle性能优化可能出现的问题
  3. Oracle与SQL Server数据库镜像对比

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/304957.html<

(0)
管理的头像管理
上一篇2025-05-25 23:25
下一篇 2025-05-25 23:26

相关推荐

  • 云服务器和云虚拟主机怎么选?云服务器和虚拟主机区别

    云服务器适合业务增长快、需弹性扩展的场景,而云虚拟主机适合预算有限、技术门槛低的小型静态网站或测试环境,二者核心区别在于资源独享性与运维复杂度,核心差异解析:从底层架构到使用体验很多人容易混淆这两者,觉得它们都是“买空间建站”,它们的底层逻辑完全不同,云服务器(ECS)就像是你租了一整栋别墅,水电网络独立,你想……

    2026-06-29
    0
  • 赣州智慧旅游招聘是真的吗?赣州旅游人才招聘信息

    中级岗位(3-5年经验)月薪范围通常在6000-10000元,这类岗位需要独立负责项目模块,如独立运营一个抖音账号,或维护一个景区小程序的功能迭代,具备成功案例的候选人议价能力较强,高级岗位(5年以上经验)月薪范围通常在10000-20000元,部分核心管理岗可达更高,这类人才需要具备战略规划能力,如制定整个景……

    2026-06-29
    0
  • 赣州智能物联网车位锁如何管理?智能车位锁管理系统多少钱

    赣州智能物联网车位锁管理的核心在于通过云端平台实现远程控锁、状态实时监控及自动计费,彻底解决传统车位“被占难管”与“找位难”的痛点,在赣州这样的城市,随着机动车保有量的持续增长,老旧小区、商业综合体以及私人固定车位的资源矛盾日益凸显,传统的机械地锁或简易遥控锁,不仅操作繁琐,更无法实现数据化管理,引入智能物联网……

    2026-06-29
    0
  • 赣州智能消防栓好用吗,智能消防栓多少钱一个

    赣州智能消防栓通过物联网技术实现实时监测与远程报警,能显著降低火灾响应时间并提升城市消防安全管理水平,是目前智慧城市建设中不可或缺的基础设施,赣州智能消防栓的核心价值与应用场景传统消防栓往往存在“看不见、摸不着、用不了”的痛点,在赣州这样地形复杂、老城区与新城区并存的区域,传统设施的管理难度极大,智能消防栓的出……

    2026-06-29
    0
  • 云服务器和物理机到底有啥区别?

    云服务器本质上是虚拟化资源池中的弹性实例,而传统物理服务器是独占的硬件实体,前者胜在弹性与运维便捷,后者强在物理隔离与性能稳定,具体选择取决于业务对成本、扩展性及安全合规的权衡,很多人初次接触服务器时,容易把“云服务器”和“传统物理服务器”混为一谈,觉得它们都是用来跑网站或存数据的盒子,这两者的底层逻辑完全不同……

    2026-06-29
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注