分类: Oracle
2009-07-27 21:07:53
1:roll forward : 将已经写入redo log file 中但是没有写入datafile中的提交与未提交的数据写入数据文件 。 属于实例恢复,一般在开启的时候进行。
2:rollback : 在数据库开启之后,会查找redo log file中记录的commit maker ,根据undo block中的内容将它回滚到一致的状态。
在一个事务发生的时候, Oracle会先将对应的redo 写到log buffer, 再生成相应的undo, 将undo 的redo写到redo log buffer,再对当前的数据块做变更,redo log buffer在一定的条件下写到redo log file,在用户commit的时候, 系统会将当前log buffer中的所有的redo entry都写到redo log file中, 不管是不是当前事务产生的redo, 同时会将当前commit的commit marker也写到redo log file中.
对应与上面的情况, commit已经发出, 可能正在写redo log, 当时commit marker还没写,这样在做instance recovery的时候会将这些redo log先forward到buffer cache中, datablock 与undo block都forward到buffer cache中, 再检查没有commit的事务, 将这些事务rollback, 我们上面的第一个问题, 因为对应的commit marker没有写到redo log file中, 这样对应的事务就是没有commit的事务, 系统会根据undo block中的内容将其回滚到一个一致的状态