Oracle实例恢复机制

整理自《OCP/OCA认证考试指南》

001 

    实例恢复不仅可以重新构成在崩溃时未被保存至数据文件的任何已提交事务,而且可以回滚已被写至数据文件的任何未提交事务。这种恢复是完全自动的,我们无法随意停止实例恢复过程。如果实例恢复失败,那么唯一的可能是在实例失败的同时还存在介质失败,此时只有在使用介质恢复技术还原和恢复受损文件后才能打开数据库。介质恢复的最后一个步骤是自动的实例恢复。

002 实例恢复机制

    大体上,实例恢复只不过是使用联机日志文件的内容将数据库缓冲区缓存重新构建至崩溃之前的状态。这个重构过程将重演从崩溃时未被写至磁盘的数据块的相关重做日志中提取出的所有变更。完成上述操作之后,就能够打开数据库。此时,数据库仍然受到损坏,但是由于用户看到的实例已被修复,因此允许用户进行连接。实例恢复的这个阶段称为前滚,该阶段将恢复所有变更(也就是针对已提交和未提交事务的数据块变更与撤销块变更)。每条重做记录都具有重新构造一个变更所需的最少信息:数据块的地址以及新值。在前滚期间,会读取每条重做记录,相应的数据块从数据文件载入数据库缓冲区缓存,并且应用相应的变更。随后,数据块会被写回磁盘。

    向前回滚结束后,崩溃看上去似乎从未发生过。不过此时数据库中还存在未提交的事务,这些事务必须被回滚,Oracle将在实例恢复的回滚阶段自动完成未提交事务的回滚操作。然而,上述操作则发生在数据库已被打开且使用之后。如果用户在连接时遇到某些需要回滚但是尚未回滚的数据,那么不存在任何问题。由于前滚阶段会填充保护未提交事务的撤销段,因此服务器能够以正常的方式回滚变更,从而实现读一致性。

    实例恢复是自动的、不可避免的,那么怎样才能调用实例恢复呢?答案是使用startup命令。首先,在数据库过渡到加载模式时,SMON进程会读取控制文件。随后,在数据库过渡到open模式时,SMON进程会查看所有数据文件和联机重做日志文件的文件头。此时,如果已经出现了实例失败,由于文件头没有全部同步,因此SMON进程会发现实例失败,从而进入实例恢复进程,而数据库只能在前滚阶段结束后才能被真正地打开。

    提示:如果执行了startup命令,那么绝对不会丢失任何数据。在发生任何崩溃之后,都应当执行startup命令并查看崩溃的程度。这个命令可以解决所有问题。

时间: 2024-09-29 13:59:29

Oracle实例恢复机制的相关文章

Oracle 实例恢复

--======================= -- Oracle 实例恢复 --=======================   一.Oracle实例失败     Oracle实例失败多为实例非一致性关闭所致,通常称为崩溃(crash).实例失败的结果等同于shutdown abort.     实例失败的原因         电源负载故障         硬件故障         后台进程失败         异常关闭数据库     实例失败后的状况         数据库可能丢失已提

Oracle实例恢复和介质恢复

Oracle恢复基础概述  一.恢复解决方案 错误类型及解决方案 错误分类 恢复解决方案 介质失败 如果是少量的块损坏,使用块介质恢复:如果是大量的块.数据文件.表空间的损坏,可能需要对损坏的数据文件或者表空间执行完全恢复:如果是归档Redo日志文件或者联机Redo日志文件的丢失,那么只需要不完全恢复方式. 逻辑损坏 如果是程序员错误导致出现的问题,可通过补丁应用修复问题.对于无法修复的问题,也可采用介质恢复手段来恢复数据. 用户错误 根据不同用户错误,选择不同的Flashback技术恢复,使用

Oracle实例恢复

Oracle实例恢复原理 首先从事物说起,当执行update开启一个事物的时候,首先需要在buffer cache中找到可用的块(block)更新数据,然后构造cr块,将update之前的数据放入到undo中,同时会在log buffer内写日志,log buffer内数据每隔3秒通过lgwr进程将往redo log写日志,在这个过程更改的数据还在内存中,产生脏数据,直到dbwr进程将脏数据写入到磁盘,如果脏数据还未写入磁盘,脏数据中包括提交或未提交的,这个时候由于掉掉或其他原因导致数据库意外宕

Oracle实例恢复的顺序

通过alert仔细观查,发现实例恢复的顺序是: 1.前滚 2.open db 3.rollback(注意:SMON: Parallel transaction recovery tried 在Completed: ALTER DATABASE OPEN)之后 SMON: enabling cache recovery Mon Jun 13 16:50:50 2011 Successfully onlined Undo Tablespace 1. Mon Jun 13 16:50:50 2011

Oracle实例恢复概述

一.Oracle实例失败 Oracle实例失败多为实例非一致性关闭所致,通常称为崩溃(crash).实例失败的结果等同于shutdown abort. 实例失败的原因 电源负载故障 硬件故障 后台进程失败 异常关闭数据库 实例失败后的状况 数据库可能丢失已提交的事务以及存储了未提交的事务,导致数据库出现不一致的情况 解决方案 使用startup 重新启动实例.实例实现自动恢复,根据联机日志文件前滚提交的事务,回滚未提交的事务 查看告警日志.跟踪日志等找出出现故障的原因 二.检查点 检查点在体系结

简述Oracle实例恢复的原理

当数据库突然崩溃,例如突然掉电,硬件故障等 ,还没来得及将buffer cache里面的脏数据块写入到数据文件中,同时在实例崩溃时,运行的事物也突然被中断,这时候事物是出于中间状态的,既没有提交也没有回滚,这个时候数据文件是不一致的状态. 当修复完故障启动实例的时候,oracle的SMON进程会执行实例恢复,检查控制文件中的STOP SCN号(SCN 有四种1:系统SCN 2:数据文件SCN 3:启动SCN号 4: 终止SCN号) 数据库在正常运行中终止SCN号始终是空的,当数据库正常关闭的时候

Oracle实例恢复详解

什么时候会产生实例恢复呢?当你数据库服务器异常断电,重启数据库就会发生实例恢复.实例恢复是由数据库自动完成的,无须DBA的干涉.当然这里有个前提条件:数据文件.在线日志文件.控制文件不得有损坏. 我们用实验来分析一下实例恢复的整个过程吧! 1.在关闭数据库前,我们先看一下几个检查点的SCN SQL> select checkpoint_change# from v$database; CHECKPOINT_CHANGE#   ------------------   1455180 --控制文件

oracle介质恢复和实例恢复的概念

1.概念 REDO LOG是Oracle为确保已经提交的事务不会丢失而建立的一个机制.实际上REDO LOG的存在是为两种场景准备的,一种我们称之为实例恢复(INSTANCE RECOVERY),一种我们称之为介质恢复(MEDIA RECOVERY). 实例恢复的目的是在数据库发生故障时,确保BUFFER CACHE中的数据不会丢失,不会造成数据库的不一致. 介质恢复的目的是当数据文件发生故障时,能够恢复数据. 虽然这两种恢复使用的机制类似的,但是这两种恢复也有着十分本质的不同,这一点也是很多D

实例恢复(Instance Recovery)之前滚(Rolling Forward)和回滚(Rolling Back)

Oracle实例恢复(Instance Recovery)之前滚(Rolling Forward)和回滚(Rolling Back)     关于oracle实例恢复的一些理解,一直都有误区,今天通过查看相关资料和与同学探讨,发觉了自己的错误,探讨结果如下:       实例恢复:当数据库非正常关闭的时候(断电或者shu  abort等等非一致性关闭),当你从新启动数据库的时候,数据库相关进程自动进行实例恢复,无须人工干预,        一. 什么时候需要实例恢复     在shutdown