Wrayの知识库 Wrayの知识库
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • 计算机基础
  • 操作系统原理
  • Linux
  • MacOS
  • Windows
  • 系统工程与研究专题
  • AI 基础
  • 大模型基础
  • Prompt 工程
  • RAG 检索增强生成
  • Agent 智能体
  • AI 应用开发
  • AI 工程化
  • AI 安全与治理
  • AI 面试与设计题
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • 计算机基础
  • 操作系统原理
  • Linux
  • MacOS
  • Windows
  • 系统工程与研究专题
  • AI 基础
  • 大模型基础
  • Prompt 工程
  • RAG 检索增强生成
  • Agent 智能体
  • AI 应用开发
  • AI 工程化
  • AI 安全与治理
  • AI 面试与设计题
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
  • 数据库概述
  • MySQL

  • Redis

  • Oracle

    • Oracle概述
    • Oracle版本与部署选型
    • Oracle安装配置与客户端工具
    • Oracle体系结构与实例数据库
    • Oracle内存结构SGA与PGA
    • Oracle进程与后台任务
    • Oracle存储结构与表空间
    • Oracle数据类型与字符集
    • Oracle Schema对象与数据建模
    • SQL基础与Oracle语法特性
    • PLSQL基础与包过程函数
    • Oracle事务与一致性读
    • Oracle锁闩锁与并发控制
    • Undo Redo与归档日志
      • 1. 学习目标与定位
      • 2. 核心概念总览
      • 3. 底层原理详解
      • 4. 关键机制拆解
        • 4.1. Undo 的双重职责
        • 4.2. Redo、LGWR 与提交延迟
        • 4.3. 日志切换、检查点与归档
        • 4.4. Force Logging 与 Supplemental Logging
      • 5. 功能模块细节补充
        • 5.1. Undo Segment
        • 5.2. Redo Record
        • 5.3. Redo Log Buffer
        • 5.4. Online Redo Log
        • 5.5. Log Switch
        • 5.6. Checkpoint
        • 5.7. Archive Log
        • 5.8. Force Logging
        • 5.9. Supplemental Logging
      • 6. 开发人员重点提醒
      • 7. 运维人员重点提醒
      • 8. 典型问题与排查
      • 9. 实践建议与检查清单
      • 10. 阶段小结
    • Oracle索引结构与设计
    • 执行计划与DBMS_XPLAN
    • 优化器统计信息与SQL调优
    • AWR ASH与性能诊断
    • Oracle等待事件与故障排查
    • RMAN备份恢复与闪回技术
    • Data Guard与灾备架构
    • RAC集群与服务高可用
    • ASM存储与文件管理
    • Multitenant CDB与PDB
    • 分区表与VLDB实践
    • 数据泵SQLLoader与数据迁移
    • Oracle安全审计与权限治理
    • Oracle开发连接池与JDBC实践
    • JSON向量与多模型能力
    • Oracle运维规范与面试设计题
目录

Undo Redo与归档日志

Undo、Redo 和归档日志是 Oracle 可靠性的底座。Undo 支撑回滚和一致性读,Redo 支撑崩溃恢复,归档日志支撑介质恢复、Data Guard 和时间点恢复。

# 1. 学习目标与定位

维度 内容
难度层级 核心到恢复
核心目标 从底层运行链路理解本篇主题,能把概念、SQL、指标、故障和工程取舍连起来
适合人群 开发人员关注事务大小、提交频率和批量加载;运维人员关注日志写入、归档空间、恢复链路和灾备同步。

# 2. 核心概念总览

Undo Redo与归档日志
├─ Undo Segment
├─ Redo Record
├─ Redo Log Buffer
├─ Online Redo Log
├─ Log Switch
├─ Checkpoint
├─ Archive Log
├─ Force Logging
└─ Supplemental Logging

这张图只用来定位本章范围。正文不会把每个词机械拆成固定问答,而是按 Oracle 的真实运行机制解释它们之间如何协作、在哪里影响开发、在哪里影响运维。

# 3. 底层原理详解

Undo 记录变更前镜像,服务回滚和一致性读;Redo 记录变更后的物理重做信息,服务崩溃恢复。二者方向不同,但都由事务写入驱动。

提交时 Oracle 不要求数据块立即写入数据文件,而要求相关 Redo 被 LGWR 持久化到联机日志。崩溃后通过 Redo 重放变更,再用 Undo 回滚未提交事务,保证提交不丢、未提交不乱。

归档日志是联机 Redo 日志切换后的持久副本。没有归档,恢复能力通常只能到备份点;有归档,RMAN、Data Guard 和时间点恢复才有连续日志链。

# 4. 关键机制拆解

# 4.1. Undo 的双重职责

Undo 保存旧版本,事务回滚时沿 Undo 撤销修改,查询一致性读时沿 Undo 构造历史版本。Undo 表空间压力因此同时来自写事务和长查询。

长事务会延迟 Undo 清理,长查询会要求保留旧版本。两者叠加时,很容易出现 Undo 膨胀、快照过旧和回滚缓慢。

# 4.2. Redo、LGWR 与提交延迟

Redo 先写入 Redo Log Buffer,提交时 LGWR 将相关 Redo 写入联机日志。前台会话等待 LGWR 完成,因此日志盘延迟、同步备库和提交频率都会影响 log file sync。

循环单行提交会放大提交等待,超大事务会放大日志量和恢复成本。开发人员需要根据业务一致性选择合理提交粒度。

# 4.3. 日志切换、检查点与归档

联机日志写满后发生 log switch,ARCn 将旧日志归档。Checkpoint 推进数据文件头和控制文件记录,使恢复起点前移。日志组过小会导致频繁切换,归档慢会阻塞日志复用。

归档目录满是严重生产故障。处理时既要恢复写入能力,也要保护恢复链路,不能随意删除未备份归档。

# 4.4. Force Logging 与 Supplemental Logging

NOLOGGING 操作可以减少 Redo,但会影响介质恢复和备库一致性。Force Logging 强制记录必要 Redo,常用于 Data Guard 环境。Supplemental Logging 提供额外列信息,常用于逻辑复制和 GoldenGate。

批量加载、索引重建、迁移同步前必须确认日志策略。性能优化不能以破坏恢复能力为代价。

# 5. 功能模块细节补充

本节围绕概念图中的模块逐个补充底层细节,重点讲它们在 Oracle 运行链路中的位置和相互关系,而不是按固定角色模板拆分。

# 5.1. Undo Segment

Undo Segment 处在逻辑对象和物理文件之间。Oracle 最终以数据块读写,向上组织为区、段、表空间,向下落到数据文件或 ASM 磁盘组;空间不足、热点块、坏块和 IO 延迟都要从这个层级关系里定位。

# 5.2. Redo Record

Redo Record 是 Oracle 事务一致性链路中的关键点。查询依赖 SCN 和 Undo 构造一致版本,写入依赖当前读和行锁保护最新版本,提交依赖 Redo 持久化;长事务、大事务和频繁提交都会改变这条链路的压力。

# 5.3. Redo Log Buffer

Redo Log Buffer 属于 Oracle 内存运行路径。它影响 SQL 解析、游标复用、数据块缓存、排序哈希或 Redo 暂存;分析时要同时看命中率、等待事件、实际 SQL 行为和 PGA/TEMP 溢写,不能只靠调大内存解决。

# 5.4. Online Redo Log

Online Redo Log 是实例与数据库协作链路中的组成部分。实例侧负责运行时内存、进程和调度,数据库侧负责控制文件、数据文件和日志文件;该模块的异常通常会反映到启动阶段、后台进程等待、告警日志或恢复流程中。

# 5.5. Log Switch

Log Switch 是 Oracle 事务一致性链路中的关键点。查询依赖 SCN 和 Undo 构造一致版本,写入依赖当前读和行锁保护最新版本,提交依赖 Redo 持久化;长事务、大事务和频繁提交都会改变这条链路的压力。

# 5.6. Checkpoint

Checkpoint 是 Oracle 事务一致性链路中的关键点。查询依赖 SCN 和 Undo 构造一致版本,写入依赖当前读和行锁保护最新版本,提交依赖 Redo 持久化;长事务、大事务和频繁提交都会改变这条链路的压力。

# 5.7. Archive Log

Archive Log 是 Oracle 事务一致性链路中的关键点。查询依赖 SCN 和 Undo 构造一致版本,写入依赖当前读和行锁保护最新版本,提交依赖 Redo 持久化;长事务、大事务和频繁提交都会改变这条链路的压力。

# 5.8. Force Logging

Force Logging 是 Oracle 事务一致性链路中的关键点。查询依赖 SCN 和 Undo 构造一致版本,写入依赖当前读和行锁保护最新版本,提交依赖 Redo 持久化;长事务、大事务和频繁提交都会改变这条链路的压力。

# 5.9. Supplemental Logging

Supplemental Logging 是 Oracle 事务一致性链路中的关键点。查询依赖 SCN 和 Undo 构造一致版本,写入依赖当前读和行锁保护最新版本,提交依赖 Redo 持久化;长事务、大事务和频繁提交都会改变这条链路的压力。

# 6. 开发人员重点提醒

  • 批量 DML 控制事务大小,避免极端提交频率。
  • NOLOGGING 操作必须经过 DBA 确认。
  • 大变更前确认恢复点、备份和回滚方案。

# 7. 运维人员重点提醒

  • 监控 log file sync、log file parallel write、日志切换频率、归档空间和 Data Guard 延迟。
  • 归档删除必须遵循备份保留策略。
  • 定期验证归档链完整性和恢复能力。

# 8. 典型问题与排查

  • 归档满:扩容或转移后检查备份删除策略和日志切换频率。
  • 提交慢:检查 LGWR、日志盘、同步备库和提交模式。
  • 备库不可恢复:检查 NOLOGGING 和 Force Logging。

# 9. 实践建议与检查清单

  • 归档模式开启
  • 日志组大小合理
  • 归档备份删除策略明确
  • Force Logging 策略明确
  • log file sync 有基线

# 10. 阶段小结

本篇的学习重点不是记住术语,而是能把底层机制、业务语义和生产证据连起来。读完本篇后,应该能解释关键组件如何协作、常见问题为什么发生、开发侧如何避免制造风险、运维侧如何用指标和日志把问题定位到具体链路。

上次更新: 2026/06/25, 15:30:11
Oracle锁闩锁与并发控制
Oracle索引结构与设计

← Oracle锁闩锁与并发控制 Oracle索引结构与设计→

Copyright © 2023-2026 Wray | 鄂ICP备2024050235号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式