Oracle RedoLog-基本概念和组成

本文首发公众号「小创编程
原文链接「https://www.chuonye.com/archives/oracle-redolog.html」

Oracle 数据库恢复操作最关键的依据就是 redo log,它记录了对数据库所有的更改操作。在研究如何提取 redolog 中 DML 操作的过程可谓一波三折,因为介绍 redolog 结构细节的资料实在太少了,不过好在最后大致理清了它的结构,并开发了一个基于日志的同步软件。

本系列文章就记录下研究过程中遇到的问题和使用的分析命令、工具。

原文链接:https://www.chuonye.com/archives/oracle-redolog.html

1. 什么是 Redo Log

Redo Log 就是一组文件,它们记录了对数据库的所有操作,主要包括:

  • 所有 DML 操作,INSERT\UPDATE\DELETE\SELECT FOR UPDATE
  • 所有 DDL 操作,CREATE TABLE\ALTER TABLE
  • 所有因 Recursive SQL 引起的变化,比如执行 DDL 语句时,Oracle 会隐式的执行其他 SQL 修改数据字典

在数据库事务 COMMIT 之前,Oracle 既会把变化信息写入 Rodo Log 文件,也会把原始数据-即 UNDO Segments 写入。因此,Redo Log 不仅用于恢复数据,还能保护数据回滚。

2. Oracle 如何写入 Redo Log

Oracle 数据库每个实例都有一个 redo thread 负责日志的写入,称为 LGWR,LoG WRiter 的简写。Redo Log 文件至少有两个,LGWR 采用循环覆盖的方式写入:当一个文件写满后,开始写入下一个,当最后一个文件写满后,返回第一个开始写入,如此循环。

LWR

这样写入会导致数据丢失吗?默认情况下

数据库日志有两种模式:归档非归档,非归档模式就会有覆盖写入的问题。在归档模式下,当一组 ReodLog 文件写满,发生切换时,Oracle 会保证归档完成前此组文件不被覆盖。

archive-log

可以使用以下命令手动触发日志切换:

SQL> alter system switch logfile

3. Redo Log 基本结构

Redo Log 是由一系列的 redo record 组成,每个 redo record 又是由一组 change vector 组成,每个 change vector 都记录了对单个数据块的更改操作。

Redo Log 文件在存储结构上,是按存储的,默认情况下块大小是磁盘扇区的大小,通常是 512 字节,它的格式取决于操作系统和数据库版本,这里的分析都是在 Windows Server 2008 R2Oracle 11g 的基础上进行的。

Redo Log 是按顺序写入的,基本格式如下:

redolog-format

前两个块记录的是元信息,分别是:</

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值