当前位置:  数据库>oracle

Oracle恢复内部原理(介质恢复)

    来源: 互联网  发布时间:2017-05-19

    本文导语: 介质恢复用在丢失或损坏数据文件或者丢失了控制文件的情形。介质恢复将还原的数据文件恢复成当前数据文件。还能够恢复数据文件异常脱机时没有来得及做检查点操作丢失的变更。介质恢复使用归档日志和联机日志。跟实例...

介质恢复用在丢失或损坏数据文件或者丢失了控制文件的情形。介质恢复将还原的数据文件恢复成当前数据文件。还能够恢复数据文件异常脱机时没有来得及做检查点操作丢失的变更。介质恢复使用归档日志和联机日志。跟实例恢复不同的是,介质恢复必须由命令显式调用。

系列文章:

6.1  什么时候做介质恢复

由5.3节知道,数据文件如果是还原的备份,在打开前都要进行介质恢复,即使是应用联机日志就可以恢复的。另外一种情形就是数据文件异常脱机没有做检查点操作。不做介质恢复数据库是无法打开的,需要介质恢复的数据文件也不能联机。数据库没有被任何实例打开的时候,介质恢复只能在脱机的数据文件上恢复。即使有崩溃恢复的时候也要在打开数据库显示调用介质恢复命令。此时崩溃恢复可能没有什么做的但还是会自动运行。有时候介质恢复可能发现没有日志要应用,就会报错“不需要介质恢复”,即该文件不需要恢复。

如果当前控制文件丢失了,将一个备份控制文件还原了,介质恢复就必须做了,这是所有数据文件都联机的时候还要介质恢复的一个例子。

6.2  线程合并重做程序

介质恢复应用重做日志时用的是线程合并的重做算法。即它要同时应用所有线程的重做日志,按SCN递增的顺序合并重做日志。在还原的数据文件上应用介质恢复的过程跟在联机数据文件上应用崩溃恢复的过程的不同在于:崩溃恢复同一时刻只会应用来自一个线程的日志,因为同一时刻数据文件上的块只需要最多一个线程的重做日志(同一时刻只有一个实例可能修改该块)。在还原的备份上,则无法猜测跟该块有关的线程数目。通常介质恢复时需要同时读取所有线程的重做日志,然后按照SCN递增的顺序合并重做日志。注意这个算法依赖于数据块的变更各个线程都是按SCN递增的顺序记录的(并行服务器环境中)。

6.3  还原备份

在数据库关闭或者数据文件脱机的情况下,可以将该数据文件的备份还原。注意绝不能在数据文件还在使用的情况下还原。每次都数据文件头时都会校验数据文件头部的检查点计数和数据文件在控制文件中的检查点计数以检测是否发生这种非法操作。

6.4  介质恢复命令

介质恢复命令有三种:

RECOVER DATABASE

RECOVER TABLESPACE

RECOVER DATAFILE

这三个命令的根本区别在于恢复的数据文件集合不同。三个命令都用同样的标准决定每个数据文件是否要做介质恢复。每个数据文件上都一个排它锁,介质恢复程序开始恢复前会先申请获得这个锁。如果得不到就触发一个错误。这可以防止两个恢复会话同时恢复同一个数据文件以及防止对一个在使用的数据文件进行介质恢复。

6.4.1  RECOVER DATABASE

这个命令用来恢复所有联机数据文件。如果所有实例都正常关闭并且也没有数据文件被还原,这个命令会触发一个“no recovery required”的错误。当有实例已经打开了数据文件时这个命令也会报错因为该实例已经持有所有的锁。

6.4.2  RECOVER TABLESPACE

这个命令用来恢复指定表空间上的所有数据文件。为了将表空间名转换成具体的数据文件名,数据库必须先打开。这意味着这个表空间及其所有数据文件在数据库打开前得先脱机才能进行介质恢复。如果该表空间的所有数据文件都不需要介质恢复时会触发一个错误说没有文件需要介质恢复。

6.4.3  RECOVER DATAFILE

这个命令用来恢复指定的数据文件,无论数据库是否打开,只要能获得该数据文件上的介质恢复锁即可。当一个实例已经打开数据库的时候,则只能在脱机的数据文件上做介质恢复。

6.5  开始介质恢复

介质恢复时开始查找介质恢复起始SCN。如所有要恢复的数据文件的文件头中最低的检查点SCN。注意:如果一个数据文件的检查点SCN落在它的脱机SCN 范围内(见2.18)则会引发一个异常。此时,该数据文件的脱机结束SCN将替代文件头检查点SCN参与计算介质恢复起始SCN。

然后每个启用的线程(指在介质恢复开始SCN那一刻处于启用状态的线程,见2.10)都会分配一个缓冲区用来读取重做日志。每个文件的文件头的检查点 SCN被保存下来用来确保在这个SCN以前的重做日志不需要应用。结束SCN(控制文件中记录的)也被保存下来。如果是无穷大则取最大的结束SCN用来告诉介质恢复在何处停止,超出这个SCN的重做日志不需要应用(见6.10)。介质恢复结束时,之前结束SCN为无穷大的数据文件会在该结束SCN处做一个检查点操作(而不是在介质恢复结束点)。这使得一个干净脱机或者只读的数据文件在跟它的表空间干净结束SCN处进行检查点操作。


    
 
 

您可能感兴趣的文章:

  • Oracle数据库恢复后心得
  • 关于系统重装后Oracle数据库完全恢复的解决办法
  • oracle drop table(表)数据恢复方法
  • Oracle数据库备份和恢复工具 RMan
  • oracle备份恢复的具体方法
  • oracle中误删除表后恢复语句(FLASHBACK)
  • oracle冷备份恢复和oracle异机恢复使用方法
  • 在Oracle 10gR2中设定指定的恢复点实现轻松闪回
  • Oracle重做日志文件损坏或丢失后的恢复
  • Oracle11g备份和恢复功能的提高
  • 实战Oracle数据库备份与恢复
  • Oracle数据库冷备份的异地恢复
  • oracle下实现恢复一个丢失的数据文件的代码
  • Linux系统下Oracle的启动与Oracle监听的启动 iis7站长之家
  • Oracle的恢复管理器及DBMS_JOB包分析
  • Oracle数据库文件恢复以及备份思路
  • Oracle数据库备份恢复最佳实践
  • oracle如何恢复被覆盖的存储过程
  • rman恢复方案和oracle异机恢复
  • oracle数据库创建备份与恢复脚本整理
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ORACLE数据库在线备份原理祥述
  • Oracle数据库异构服务原理及实例说明
  • Oracle数据库异步调用基本原理及测试
  • Oracle跨数据库查询并插入实现原理及代码
  • Oracle数据块实现原理深入解读
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,