原帖由 jayli426 于 2008-6-11 14:47 发表
例如现在有一个checkpoint C1,然后有个故障点E1
在C1到E1之间有个事务 T1,他已经commit,
按照书上的说法,这个T1事务是要redo的,但问题是这是建立T1操作的相应数据没有
从缓存中写入数据库的.如果数据已经写入数据库了,明显是不用redo的
但是书上好象从来没有提到这一点
只是说checkpoint前的已经提交的事务其操作的数据肯定也写入了数据库,所以不用redo
那么在checkpoint和故障点之间的事务是如何保证
那些已经commited的事务哪些要redo,哪些又不用redo的呢
大虾指教啊
楼主,一起学习。
你说的这是crash(instance) recovery的基本原理。oracle知道增量检查点的进度,恢复时smon进程根据控制文件中记录的low cache rba开始重做,并不考虑是否commit,之后再回滚uncommited事务。low cache rba是联机日志文件中的一个位置,这个位置之前的数据块全部同步到了磁盘上。
|