当前位置: 首页 > article >正文

Oracle 深入学习 Part 7: Maintaining Online Redo Log Files(维护联机重做日志文件)

        联机日志文件又叫重做日志文件,记录了对数据库的任何改变。Oracle 遵循 WAL(Write-Ahead Logging) 原则,即在提交事务前,先写到 Redo Buffer(日志缓冲区),再由 LGWR(日志写入进程) 写入到物理的联机重做日志文件中。

1.1 组的概念
  • 每个日志组包含多个 成员文件(Member),用来保证日志的冗余性和可靠性。

  • 如果一个组中有多个成员,只要其中一个成员有效,日志写入仍可继续。

1.2 LSN(Log Sequence Number, 日志序列号
  • 是 Oracle 数据库中用来标识 重做日志记录顺序 的一个重要概念。

  • 每次日志切换(Log Switch)时,日志序列号会递增。

1.3 Thread 的概念
  • RAC(Real Application Cluster) 环境中,每个实例都有自己独立的重做日志组。

  • 每个实例的日志组对应一个线程(Thread)。

1.4 LGWR(Log Writer,日志写入进程)
  • 负责将 Redo Log Buffer 中的日志数据写入到 联机重做日志文件 中。

  • 日志写入时,LGWR 会将相同的数据同时写入组内的所有成员文件。

1.5 日志切换与检查点

日志切换(Log Switch):

日志切换是指 Oracle 数据库从当前的联机重做日志文件(Online Redo Log File)切换到下一个日志文件 的过程。

触发条件
  • 当前日志文件写满

    • LGWR 写入日志组时,发现当前日志文件已经写满,会触发日志切换。

  • 手动切换

    • 数据库管理员可以通过 ALTER SYSTEM SWITCH LOGFILE; 命令手动触发日志切换。

  • 参数控制切换

    • 可以通过调整参数(例如设置 ARCHIVE_LAG_TARGET),让日志定期切换,即使日志未写满。

检查点(Checkpoint):

检查点是数据库内部的一个事件,用于 将内存中的脏数据(Dirty Buffer)同步到数据文件,并更新控制文件和数据文件头部的检查点信息

触发条件
  1. 日志切换

    • 每次日志切换都会触发检查点。

  2. 时间间隔

    • Oracle 会根据参数(如 FAST_START_MTTR_TARGET)定期触发检查点。

  3. 手动触发

    • 数据库管理员可以使用 ALTER SYSTEM CHECKPOINT; 命令手动触发。

  4. 正常关闭数据库

    • 当数据库正常关闭时,会触发检查点,确保所有脏数据写入磁盘。

概念日志切换(Log Switch)检查点(Checkpoint)
触发时机日志写满、手动切换或参数控制日志切换、时间间隔、手动触发、正常关闭
执行内容停止当前日志组写入,切换到下一个日志组将脏数据写入磁盘,更新控制文件和数据文件头
目的管理日志文件顺序、触发归档、确保事务日志的持久性保证数据一致性、减少崩溃恢复时间
关系日志切换一定触发检查点检查点不一定触发日志切换

2. LGWR 触发写入的条件

2.1 提交事务(Commit)
  • 当用户执行 COMMIT 时,LGWR 会立即将 Redo Log Buffer 中与该事务相关的日志条目写入到 Redo Log 文件 中,确保事务的持久性。

  • 提交时触发写入是为了保证事务的 "一致性和可恢复性"。

2.2 每 3 秒(定时刷新机制)
  • 即使没有提交或特殊事件,LGWR 会定期将 Redo Log Buffer 中的数据刷到 Redo Log 文件,默认时间为 3秒

  • 这种机制是为了减少缓冲区的数据积压,确保日志写入及时。

2.3 Redo Log Buffer 使用量达到 1/3**
  • Redo Log Buffer 的使用量达到其总大小的 1/3 时,LGWR 会触发写入。

  • 此机制保证内存的高效利用,避免缓冲区溢出。

2.4 Redo Log Buffer 达到 1MB**
  • 如果 Redo Log Buffer 中的日志条目达到 1MB 的大小(即便没有达到 1/3 的阈值),LGWR 也会触发写入。

  • 这种大小限制可以平衡性能和写入频率。

2.5 DBWn 回写前
  • DBWn(数据库写进程) 将内存中的脏数据块写入数据文件之前,LGWR 必须确保与这些块相关的日志条目已经被写入到 Redo Log 文件 中。

  • 这样做是为了在崩溃恢复时能够用日志文件还原内存中尚未写入的数据文件的事务。

触发条件触发场景说明
事务提交(Commit)确保事务日志持久化,提供提交后的恢复能力
每 3 秒(定时机制)减少日志积压,保证日志数据及时写入
Redo Log Buffer 使用 1/3避免缓冲区溢出,保证内存利用效率
Redo Log Buffer 达 1MB通过大小阈值平衡性能与写入频率
DBWn 写脏块前保证数据块写入前相关日志条目已写入,防止数据不一致

3.归档日志 archive redo log files

在 Oracle 数据库中,归档日志(Archive Redo Log Files) 是指将 联机重做日志(Online Redo Log Files) 复制到归档位置,以便长期保存,支持数据库恢复和备份。它在数据库开启 归档模式(ARCHIVELOG) 后生效。


http://www.kler.cn/a/410001.html

相关文章:

  • 深度学习中的长短期记忆网络(LSTM)与自然语言处理
  • 详细探索xinput1_3.dll:功能、问题与xinput1_3.dll丢失的解决方案
  • Redis 常用数据类型插入性能对比:循环插入 vs. 批量插入
  • 神经网络12-Time-Series Transformer (TST)模型
  • leetcode 面试150之 156.LUR 缓存
  • 5、AI测试辅助-生成测试用例思维导图
  • Linux网络编程----使用多进程实现并发服务器
  • 【Leetcode 每日一题】146. LRU 缓存(c++)
  • Django快速上手:从零到一构建Web应用
  • HTMLCSS:彩色灵动气泡效果
  • Redis的管道操作
  • 小程序-基于java+SpringBoot+Vue的农场管理系统设计与实现
  • I.MX6U 裸机开发20. DDR3 内存知识
  • 模拟器多开限制ip,如何设置单窗口单ip,每个窗口ip不同
  • Oracle RMAN克隆数据库(同主机)
  • 硬件基础22 反馈放大电路
  • 深入解析信号量:定义与环形队列生产消费模型剖析
  • 深入理解B-树与B+树:数据结构中的高效索引利器
  • node.js.抓取代理ip(提供参考)
  • Python网络爬虫基础
  • mac 安装node提示 nvm install v14.21.3 failed可能存在问题
  • 华为ENSP--IP编址及静态路由配置
  • Python3 WebUI自动化总篇:Python3+Selenium+Pytest+Allure+ Jenkins webUI自动化框架
  • AddIPAddress添加临时IP后,socket bind失败
  • 记录两次Unity编辑器和真机表现不符的情况,引用丢失等
  • 英语知识在线平台:Spring Boot框架实践