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回滚事务。