实例恢复完全自动,与介质恢复不同的是:介质恢复需要很长的篇幅描述,而
实例恢复则只需简单的描述。其实,实例恢复是使用联机日志文件的内容将数据库缓冲区缓存重新构建至崩溃之前的状态。这个重构过程将重演从崩溃时未写至磁盘的
数据块的相关重做日志中提取出得所有变更。完成以上操作后,就可以打开数据库。
此时,数据库仍然受到损坏,但是由于用户看到的实例已被修复,因此允许用户进行连接。实例恢复的这个阶段称为前滚,该阶段将恢复所有变更。每条重做记录都具有
重新构造一个变更所需的最少信息:数据块的地址以及新值。在前滚期间,会读取每条重做记录,相应的数据块从数据文件载入数据库缓存区缓存,并且应用响应的变更。随后,数据块被协会磁盘。
向前回滚结束后,崩溃看上去似乎从未发生过,不过此时数据库中还存在未提交的事务,这些事务必须被回滚,Oracle将在实例恢复的回滚阶段自动完成未提交事务的
回滚操作。然而,上述操作发生在数据库已被打开并且使用之后。如果用户在连接时
遇到某些需要回滚但是未回滚的数据,那么不存在任何问题。由于前滚阶段会填充保护未提交事务的撤销段,因此服务器能够以正常的方式回滚变更。从而实现读一致性。
实例恢复是自动的,不可避免的,调用实例恢复的命令是startup
在数据库过渡到加载模式时,SMNO进程会读取控制文件。然后,在数据库过渡到打开模式时,SMON进程会查看所有数据文件和联机重做日志文件的文件头。此时,如果已经出现了实例失败。由于文件头没有全部同步,因此,SMON进程会发现实例失败,从而进入实例恢复例程,而数据库只能在前滚阶段结束之后才能真正的打开。
(注:如果执行了startup命令,那么绝对不会丢失任何数据。在发生任何崩溃之后,都应当执行startup命令并查看崩溃的程度。这个命令可以解决所有问题。)
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
名词解释:
前滚-恢复。白话:还没有做,根据日志继续把它做完。
回滚-撤销。白话:已经做了,根据日志取消刚才所做的。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。