小案例分析:

已有 1078 次阅读2012-12-11 15:59 |个人分类:案例分析| 案例分析

update student set name = 'ge' where name = 'xiao'

Oracle内部如此操作:
1:redo log buffer生成表和undo段的redo信息。
2:在buffer cache里面修改name = 'ge' 并且修改undo段
如果一切正常,commit之后,先触发lgwr把redo log buffer里

面的信息写到redo log file。
—————【突发情况1】—————
系统崩溃:
可能会丢失buffer cache里面的脏数据,不用rollback,可以从

redo log恢复。
—————【突发情况2】—————
lgwr写入redo log file的过程中系统崩溃:
首先commit没有成功,此时datafile和redo log都没有相应数据

,在下次系统启动时也不用rollback。
—————【突发情况3】—————
如果commit之前,buffer cache满了,此时就会触及dbwr,而

dbwr再触及lgwr把redo log buffer里面的数据写到redo log 

file中。此时系统崩溃:
通过redo生成undo,再rollback通过undo回滚事务。

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 加入社区

意见
反馈