|
Re: Re: Re: o
最初由 玉面飞龙 发布
[B]
如果是这样的话,那apply redo 就不是简单的insert /update/delete了
以为恢复的时候smon 执行redo log中的普通sql 应用到数据库中,dml自动产生undo
觉得应该如此:
1修改block之前先将redo entry写入 redo buffer (lgwr写redo log file)
2将对应的undo写回滚段,写回滚段之前写回滚的redo entry到 redo buffer (lgwr写redo log file)
3修改block信息 (block写入到数据文件之前 保证对应redo entry已经写入redo log file)
如果第一步完成,数据库crash; 如果redo entry 在redo buffer 中,则恢复的时候不会处理该redo entry; 如果已经写入到redo log file,则按照没有提交的事务处理 而rolback 。 [/B]
如上部分我的理解有错误。应该是rainy说的先写undo的日志到log buffer.
1将对应的undo写回滚段,写回滚段之前写回滚的redo entry到 redo buffer (lgwr写redo log file)
2修改block之前先将data block redo entry写入 redo buffer (lgwr写redo log file)
3修改block信息 (block写入到数据文件之前 保证对应redo entry已经写入redo log file)
先写undo block redo entry表示恢复的时候就先将undo block redo 写到 undo block,如果rollback的话,也有内容可以rollback. |
|