zoukankan      html  css  js  c++  java
  • recover database using backup controlfile理解

    深入剖析 - Oracle SCN机制详细解读

    media recovery和instance recovery的差别

    https://www.cnblogs.com/Peyton-for-2012/archive/2013/03/01/2938416.html

    recover database using backup controlfile

    http://blog.chinaunix.net/uid-20274021-id-1969571.html

    要理解recover database using backup controlfile,先理解 recover database 也就是说,不加using backup controlfile

    的情况。在普通的recover database 或者 recover tablespace, recover datafile时, Oracle会以当前controlfile所纪录的

    SCN为准,利用archive log和 redo log的redo entry, 把相关的datafile 的 block恢复到“当前controlfile所纪录的SCN”。

    而某些情况下,Oracle需要把数据恢复到比当前controlfile所纪录的SCN还要靠后的位置(比如说,control file是backup 

    controlfile , 或者 controlfile是根据trace create的。),这时候,就需要用using backup controlfile. 恢复就不会受“当前

    controlfile所纪录的SCN”的限制。这时候的限制就来自于你的语句(until time , until scn),或者可用的archive log(until 

    cancel) ...

    首先这里我们先介绍四个SCN概念。

    1、系统检查点scn (System Checkpoint SCN)

    当一个checkpoint检查点动作完成后,Oracle就把系统检查点的SCN存储到控制文件中。

    select checkpoint_change# from v$database;

    2,数据文件检查点scn (Datafile Checkpoint SCN)

    当一个checkpoint动作完成后,Oracle就把每个数据文件的Datafile Checkpoint SCN单独存放在控制文件中。

    select name,checkpoint_change# from v$datafile;

    3,启动scn (Start SCN)

    Oracle把这个检查点的scn存储在每个数据文件的文件头中,这个值称为启动scn,这个SCN用于用于在数据库实例启动

    时,检查是否需要执行数据库恢复media recovery。

    select name,checkpoint_change# from v$datafile_header;

    4、终止scn (Stop SCN)

    每个数据文件的终止scn都存储在控制文件中。这个SCN号用于检查数据库启动过程是否需要做instance recovery。

    select name,last_change# from v$datafile;

    5.media recovery和instance recovery

    1).media recovery是需要利用以前的备份来进行恢复的,而INSTANCE RECOVERY是不需要的。

    2).media recovery通常发生在数据库的数据文件之类发生损坏,需要利用以前的备份来进行的恢复,需要人工处理。

    3).instance recovery则是发生在实例不正常关闭情况下的恢复,是INSTANCE自己来的,不需要人工干预的。

    6、在数据库运行期间的scn值

    1).在数据库打开并运行之后,控制文件中的系统检查点、控制文件中的数据文件检查点scn和每个数据文件头中的启动scn都

    是相同的。控制文件中的每个数据文件的终止scn都为null.

    2).在安全关闭数据库的过程中,系统会执行一个检查点动作,这时所有数据文件的终止scn都会设置成数据文件头中的那个

    启动scn的值。

    3).在数据库重新启动的时候,Oracle将文件头中的那个启动scn与数据库文件检查点scn进行比较,如果这两个值相互匹配,

    oracle接下来还要比较数据文件头中的启动scn和控制文件中数据文件的终止scn。如果这两个值也一致,就意味着所有数据

    块多已经提交,所有对数据库的修改都没有在关闭数据库的过程中丢失,因此这次启动数据库的过程也不需要任何恢复操作,

    此时数据库就可以打开了。当所有的数据库都打开之后,存储在控制文件中的数据文件终止scn的值再次被更改为null,这表

    示数据文件已经打开并能够正常使用了。   

    7.SCN与数据库启动

    在数据库启动过程中,当System Checkpoint SCN、Datafile Checkpoint SCN和Start SCN都相同时,数据库可以正常启

    动,不需要做media recovery。三者当中有一个不同时,则需要做media recovery.如果在启动的过程中,End SCN为NULL

    ,则需要做instance recovery。Oracle在启动过程中首先检查是否需要media recovery,然后再检查是否需要instance 

    reco very。

    8.SCN与数据库关闭

    如果数据库的正常关闭的话,将会触发一个checkpoint,同时将数据文件的END SCN设置为相应数据文件的Start SCN。当

    数据库启动时,发现它们是一致的,则不需要做instance recovery。在数据库正常启动后,ORACLE会将END SCN设置为

    NULL.如果数据库异常关闭的话,则END SCN将为NULL。

    9.系统正常关闭:

    system scn=datafile scn=start scn=stop scn

    1)system scn=datafile scn=start scn,不需要介质恢复

    2)stopscn not null,不需要实例恢复

    10.系统异常关闭:

    system scn=datafile scn=start scn,stop scn null

    1)system scn=datafile scn=start scn,不需要介质恢复

    2)stopscn null,需要实例恢复

    11.旧数据文件

    system scn=datafile scn>start scn,stop scn null/notnull

    1)system scn=datafile scn>start scn,需要介质恢复成system scn=datafile scn=start scn

    2)stopscn null,需要实例恢复,not null 不需要实例恢复

    12.备份控制文件

    system scn=datafile scn<=start scn(当数据文件为旧的相等),stop scn notnull/null

    1)system scn=datafile scn<=start scn,需要使用using backup controlfile介质恢复成system scn=datafile scn=start 

    scn=current log scn(当前日志最大SCN)

    2)为保证上一次恢复没有用到log日志不被使用,必须resetlogs

    13.重建noresetlogs控制文件

    控制文件中 datafile Checkpoint来自Online logs中的Current log头

    current log scn=system scn=datafile scn>=start scn,stop scn not null/null

    1)current log scn=system scn=datafile scn>=start scn,需要介质恢复成system scn=datafile scn=start scn=redolog  

    scn(当前日志最大SCN),stop scn not null

    2)stopscn not null 不需要实例恢复

    14.重建resetlogs控制文件

    控制文件中datafile Checkpoint来自各数据文件头。 

    system scn>=datafile scn=start scn,stop scn not null/null

    1)system scn>=datafile scn=start scn,需要使用using backup controlfile介质恢复成system scn=datafile scn=start 

    scn(当前日志最大SCN),stop scn not null

    2)stop notnull,因为SCN已经为redolog scn,log已经不能使用,必须resetlogs

    15.recover database using backup controlfile

    如果丢失当前控制文件,用冷备份的控制文件恢复的时候,用来告诉oracle,不要以controlfile中的scn作为恢复的终点;

    16.recover database until cancel

    如果丢失current/active redo的时候,手动指定终点。

    17.recover database using backup controlfile until cancel

    如果丢失当前controlfile并且current/active redo都丢失,会先去自动应用归档日志,可以实现最大的恢复;

    引用地址:

    http://blog.itpub.net/31397003/viewspace-2666619/

    喜欢请赞赏一下啦^_^

    微信赞赏

    支付宝赞赏

  • 相关阅读:
    HDU4529 郑厂长系列故事——N骑士问题 —— 状压DP
    POJ1185 炮兵阵地 —— 状压DP
    BZOJ1415 聪聪和可可 —— 期望 记忆化搜索
    TopCoder SRM420 Div1 RedIsGood —— 期望
    LightOJ
    LightOJ
    后缀数组小结
    URAL
    POJ3581 Sequence —— 后缀数组
    hdu 5269 ZYB loves Xor I
  • 原文地址:https://www.cnblogs.com/lkj371/p/15191502.html
Copyright © 2011-2022 走看看