Oracle重做日志那些事儿,实例带你一步步看透它的原理和应用
- 问答
- 2025-12-31 00:07:22
- 3
想象一下,你正在玩一个大型的在线角色扮演游戏,你辛苦打怪一整天,获得了无数金币和顶级装备,突然,服务器断电了!当你重新登录时,你发现角色不仅没有丢失进度,反而正好站在掉线前的位置,身上的装备和金币一分不少,你是不是会感叹这服务太贴心了?
Oracle数据库就能为你提供这样的“贴心服务”,而实现这个功能的核心功臣,重做日志”,我们就用最直白的方式,一步步拆解它到底是怎么工作的。
第一部分:重做日志是什么?为什么需要它?
重做日志就是数据库的“记账本”,想象一个超市,它有一个存放所有商品的仓库(这相当于Oracle的数据文件,数据最终存放的地方),但超市收银台不能每卖一包烟、一瓶水都跑去仓库翻找、记录,那样太慢了,所以收银员会先把每一笔交易快速记在一个小本子上(卖出可乐一瓶,收入3元”),这个“小本子”就是重做日志。
为什么需要这个小本子呢?
- 保证数据不丢:就像开头的游戏例子,万一数据库服务器突然断电,内存里还没来及保存到硬盘的数据就没了,但没关系,因为所有的“交易记录”已经快速写到了重做日志文件里,重启数据库后,Oracle会拿出这个“记账本”,把上面记录的操作重新做一遍,这样丢失的数据就恢复回来了,这叫前滚恢复。
- 提高数据库速度:直接修改仓库(数据文件)里的货物摆放是很慢的,因为硬盘读写速度有限,而先在“小本子”(重做日志)上记账就快多了,数据库可以先把很多修改操作在内存里完成,然后找个空闲时间,批量地把“小本子”上的记录同步到“仓库”里,这个内存区域叫数据库缓冲区缓存,而批量同步的过程叫检查点。
第二部分:重做日志是怎么工作的?一个生动的例子
我们来模拟一个用户操作:你要把张三的工资从5000元涨到8000元。
- 第一步:收到指令,你执行了一条SQL语句:
UPDATE 员工表 SET 工资=8000 WHERE 姓名='张三'; - 第二步:在“工作台”上修改,数据库不会直接去硬盘找张三的数据,它先把张三所在的那条数据从“仓库”(数据文件)调到“工作台”(数据库缓冲区缓存)上,工作台上的张三工资数据变成了8000元,但仓库里的还是5000元。
- 第三步:赶紧“记账”,在确认修改成功的同时,数据库会立刻做一件至关重要的事:把“将张三的工资从5000改为8000”这个操作细节,一字不差地写到“记账本”(重做日志缓冲区,是内存里的一块临时日志区域)里。注意:记账的速度必须非常快。
- 第四步:正式“入账”,数据库的日志写入进程会定时行动,把“记账本”草稿(重做日志缓冲区)里的内容,快速、连续地抄写到永久的“账本文件”(在线的重做日志文件)里,直到这一步,你的涨工资操作才算真正被记录下来了,即使现在断电也不怕了。
- 第五步:闲时“入库”,过了一会儿,数据库觉得现在不忙,就会启动数据库写入进程,这个进程负责把“工作台”(缓冲区缓存)里那些已经被“记账”的脏数据(比如张三的新工资),批量地写回到“仓库”(数据文件)里,让硬盘上的数据和内存里的数据保持一致。
这个过程的核心要点是:先记账,后改库,写日志的速度远高于直接写数据文件,既保证了速度,又保证了安全。
第三部分:重做日志的日常管理和应用
你可能会问,这个“记账本”会不会无限变大?当然不会,Oracle采用了一种“轮换使用”的机制,我们会创建好几个重做日志文件(比如3个),组成一个循环队列。
假设有LOG1, LOG2, LOG3三个文件。
- 一开始,数据库向LOG1里写记录。
- 当LOG1写满了,就切换到LOG2继续写。
- LOG2写满了,切换到LOG3。
- LOG3也写满了怎么办?再切换回LOG1。
但这里有个问题:直接覆盖LOG1,里面的旧记录不就没了吗?是的,所以在此之前,数据库会派另一个叫归档进程的伙计,把即将被覆盖的LOG1文件完整地复制一份,保存为归档日志,这样,我们就拥有了一份完整的、按时间顺序排列的“历史账本”。
这个归档功能极其重要,它意味着:
- 可以实现任意时间点的恢复:比如今天中午12点,有人误删了重要数据,你不仅可以恢复到故障前的那一刻,甚至可以精确地恢复到12点整误操作发生前的那一秒钟。
- 搭建备库:你可以把这些归档日志 continuously 地应用到另一台服务器上的数据库,让它和主数据库保持实时同步,这就是数据库容灾的基础。
总结一下
重做日志就是Oracle的“安全卫士”和“加速器”,它通过先记录改变、后应用改变的方式,在确保数据万无一失的前提下,极大地提升了数据库的性能,理解重做日志和归档日志的工作原理,是管理和维护Oracle数据库的基石,无论是日常的性能调优(比如优化日志写入速度),还是至关重要的备份恢复策略,都离不开对它的深刻理解,希望这个一步步的实例讲解,能帮你真正看透它的原理和应用。

本文由邝冷亦于2025-12-31发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/71561.html
