实例恢复分为前滚和回退两个阶段。前滚阶段,SMON打开每个数据文件时记录该文件已同步的SCN值,在全部数据文件都打开后,SMON用已同步过的最小的SCN值在联机重做日志文件中逆向匹配,找到包含该SCN的第一条重做条目,然后从下一个SCN的第一条重做条目开始,把每一条重做记录所对应的事务都重新执行一遍,一直到重做日志文件结尾。增量检查点机制会对前滚操作进行优化以提高前滚的效率。现在,数据文件里就包含了截止到故障点的所有已提交和未提交的数据库修改,但是未提交的更改是不应该写入数据库的,出现这个情况的原因在于重做条目是在事务开始执行时就产生了,但是同时开始执行的事务不一定同时结束,那些跨故障点的事务虽然没有提交,但重做条目在事务开始执行时就已经按顺序写入重做日志缓冲区并很快写入联机重做日志文件组。在回退阶段,以只读方式打开数据库,对所有前滚过的重做条目重新检查一遍,凡是提交状态的SCN和时间戳为空的条目,把该条目前滚时所产生的还原数据从还原段读出直接覆盖数据文件相对应的块。同时修改相应的元数据,最后把数据库状态改为读写方式。至此,数据库中就只包含了截止到故障点的所有已提交的数据库的修改。自动的实例恢复执行完成,用户就可以正常执行事务了。
实例恢复详解
于 2022-09-25 21:40:25 首次发布