主机断电时,实例恢复中的各种情况分析:

来源:互联网 发布:女超人于莺离婚知乎 编辑:程序博客网 时间:2024/06/05 16:59

主机断电时,实例恢复中的各种情况分析:


有一种数据块在data buffer中被修改,未写入datafile中,日志记录在log buffer中,但是还没有记录在online redolog中,这时断电后,如何处理?


主机断电时,实例恢复中,data buffer 中脏块各种情况分析:


       首先把数据块按事务已提交和未提交分类:

              1.   已提交,这种情况redo记录一定在online redo log 或 archived redo log 中,它又分为内存中的脏块是否写入datafile中,

                            如果已经写入,则内存中的data和磁盘中的data一致,不需要处理。

                            如果未写入,则内存中的data和磁盘中的data不一致,这时需要smon进程在实例恢复时,进行前滚,即事务重做。


             2.  未提交,又分为三种情况,

                                如果脏块已经写入datafile 中,则根据redo 写入在前的原则,redo 记录一定也写入了 online redo log 或archived redo log 中,这种情况

                                         需要smon进程,在实例前滚结束后,smon或相应的server process 对相应这种未提交的事务进行回滚,撤销操作。

                                如果脏块未写入datafile中,则redo 记录已经写入online redo log 或archived redo log 中,这种情况

                                         需要smon进程,在实例前滚结束后,对相应这种未提交的事务进行回滚,撤销操作。

                                       (这时回滚时,对比scn号会发现实际需要回滚的操作为空,即不需要回滚)

                                如果脏块未写入datafile中,则redo 记录未写入online redo log 或archived redo log 中,

                                             这种情况下,数据改变未写入datafile中,datafile中数据未改变,redo记录未写入online redo log 或archived redo log 中,

                                            相当于未发生过,无需处理,也无法处理(因为online redo log 或archived redo log 中未记录)。

                               





0 0
原创粉丝点击