实例恢复机制Instance Recovery
实例恢复机制(Instance Recovery)是Oracle数据库中的一种机制,用于在数据库实例崩溃或异常关闭后,将数据库恢复到一致的状态。实例恢复机制的主要作用是保证数据库的一致性和可用性,避免数据的丢失和损坏。
实例恢复机制的实现方式是通过Oracle后台进程SMON(System Monitor)来完成的。当数据库实例崩溃或异常关闭后,SMON会在数据库重新启动时自动启动,并执行以下步骤来恢复数据库:
打开数据库的控制文件和日志文件,读取最近的Checkpoint信息。
从日志文件中读取未提交的事务,并将其回滚。
将未写入磁盘的脏数据写入磁盘,并更新数据库的控制文件和日志文件。
执行Redo日志,将未提交的事务重新应用到数据库中。
将数据库的状态设置为可用状态,等待用户连接。
需要注意的是,实例恢复机制只能恢复未提交的事务,已经提交的事务不会被回滚。因此,在实际应用中,需要定期进行数据备份和恢复测试,以保证数据的完整性和可用性。同时,还需要根据实际情况来配置数据库的日志文件和控制文件,以及定期监控数据库的状态和性能。
有了redo,undo和ckpt概述后,有助于更好的理解实例恢复
实例崩溃时,内存中的db buffer和磁盘上的datafile不一致.
实例恢复要解决的两个问题是:
1).重新构成崩溃时内存中未被保存到磁盘的已commit事务.
2).回滚已被写至数据文件的uncommit事务.
由于引入了增量检查点,当实例恢复时,oracle首先从控制文件里找到最后一次检查点位置,这个位置就是实例恢复时运用日志的起点.
然后是SMON监控下的一系列动作:
roll forward :利用redo,将检查点位置之后的变更,包括commit和uncommit的都前滚出来了,然后统统写到磁盘(datafile)里.
open :用户可以连接进来,访问数据库.
roll back :通过undo,把写入磁盘里(datafile)的uncommit的数据回滚.
/为何使用redo前滚 :因为abort时有可能有未写到数据文件里的已经提交的事务.
//为何使用undo回滚 :因为abort时有可能有未提交的事务写到了数据库里.