zoukankan      html  css  js  c++  java
  • [terry笔记]RMAN综合学习之恢复

     

    [terry笔记]RMAN综合学习之备份http://www.cnblogs.com/kkterry/p/3308405.html 

    [terry笔记]RMAN综合学习之恢复 http://www.cnblogs.com/kkterry/p/3308407.html 

    [terry笔记]RMAN综合学习之配置 http://www.cnblogs.com/kkterry/p/3308409.html 

    一、rman恢复的基础概念和机制

    1.在rman中,恢复主要有两个动作,一般在mount下进行:

    restore:利用备份集文件,替换损坏的数据文件。
    recover:应用归档或者redo,将数据库恢复到崩溃前的状态。
     
    2.完全恢复or不完全恢复
    完全恢复就是应用全部的归档和redo日志。
    不完全恢复就是应用部分归档和redo日志,主要语法是restore/recover...until…,不完全恢复在open的时候需要加上resetlogs。
     
    3.rman恢复的时候会去找最近可用的备份集(除非加上until子句)。如果备份集中有某个备份片段存在io错误,rman会自动寻找这个备份片段的冗余,并进行复制修复,如果没有冗余,会去找之前备份集中相应的数据块。
    recover时,如果采用了增量备份,rman会首先去寻找增量备份。
     
    二、恢复语法、例子
    1.一个简单的全库完全恢复例子(开启归档):
    rman target /
     
    configure controlfile autobackup on;
    configure controlfile autobackup format for device type disk to 'c:ackup\%F';
    allocate channel c1 device type disk format 'c:ackupak_%T_%u_%s_%p';
    backup database plus archivelog delete all input format 'c:ackupak_%T_%u_%s_%p';
     
    RMAN> shutdown immediate
    数据库已关闭
    数据库已卸装
    Oracle 实例已关闭
     
    /*首先用rman全备,并关闭数据库,删除system01.dbf、sysaux01.dbf、undotbs01.dbf、users01.dbf、temp、spfile、controlfile*/
     
    RMAN> startup nomount
    /*即使没有spfile,利用rman数据库实例也会以最小状态启动。*/
    restore spfile from 'c:ackupC-197157272-20130906-00';
    restore controlfile from 'c:ackupC-197157272-20130906-00';
    /*因为rman备份信息记录在控制文件中,所以在恢复参数文件、控制文件的时候需要指定恢复目录*/
     
    RMAN> restore database;
    启动 restore06-9月 -13
    分配的通道: ORA_DISK_1
    通道 ORA_DISK_1: SID=133 设备类型=DISK
    通道 ORA_DISK_1: 正在开始还原数据文件备份集
    通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
    通道 ORA_DISK_1: 将数据文件 00001 还原到 C:U01ORADATAKKTERRYSYSTEM01.DBF
    通道 ORA_DISK_1: 将数据文件 00002 还原到 C:U01ORADATAKKTERRYSYSAUX01.DBF
    通道 ORA_DISK_1: 将数据文件 00003 还原到 C:U01ORADATAKKTERRYUNDOTBS01.DBF
    通道 ORA_DISK_1: 将数据文件 00004 还原到 C:U01ORADATAKKTERRYUSERS01.DBF
    通道 ORA_DISK_1: 正在读取备份片段 C:BACKUPBAK_20130906_11OJ5P6K_33_1
    通道 ORA_DISK_1: 段句柄 = C:BACKUPBAK_20130906_11OJ5P6K_33_1 标记 = TAG20130906T110244
    通道 ORA_DISK_1: 已还原备份片段 1
    通道 ORA_DISK_1: 还原完成, 用时: 00:00:07
    完成 restore06-9月 -13
     
    RMAN> recover database;
    /*不成功,因为把redo删除了,redo中有需要恢复的日志,如果没有删除redo,会恢复成功。*/
     
    sqlplus / as sysdba
    alter database open resetlogs;
     
    /*如果在非归档模式下,在执行restore前需要先恢复之前备份的控制文件,并且在recover后,需要open resetlogs*/
    View Code
    2.恢复表空间:
    sql 'alter tablespace xxx offline immediate';
    restore tablespace xxx;
    recover tablespace xxx;
    sql 'alter tablespace xxx online';
     
    3.恢复数据文件:
    sql 'alter database datafile 6 offline';
    restore datafile 6;
    recover datafile 6;
    sql 'alter database datafile 6 onlien';
     
    如果磁盘损坏想指定新的位置:
    run{
    set new name for datafile 6 to '/xxx/xxx.dbf';
    restore datafile 6;
    switch datafile 6;
    recover datafile6;
    }
     
    4.恢复归档日志,一般是用来logminer或者DG备库需要归档日志。
    run{
    set archivelog destination to '/xxx/xxx';
    restore archivelog sequence between 10 and 20;
    }
     
    5.恢复控制文件和参数文件
    restore spfile/controlfile from autobackup;
    restore spfile/controlfile to '/xxx/xxx' from autobackup;
     
    /*如果修改过autobackup的默认位置,则rman找不到autobuckup*/
    1.复制参数、控制文件的备份到默认位置$ORACLE_HOME/dbs(linux/unix),$ORACLE_HOME/database(win)
    2.手动制定恢复位置:restore spfile/controlfile from '/xxx/xxx';
    6.有归档无备份,数据文件丢失
    /*从数据文件创建起,到其丢失,中间的所有归档文件如果都在,可以不用备份即可恢复(system/sysaux/undo/users除外)*/
    alter database create datafile '/xxx/xxx' as '/xxx/xxx';
    recover datafile x;
     
    7.redo丢失,数据库起不来或者直接崩溃。
    /*由于redo的特性,无法备份,只能在每组redo多做几个组员进行冗余,如果丢失就看人品了。*/
    1)非current丢失(v$log、v$logfile):
    startup mount
    alter database clear logfile group x;
    alter database open;
     
     2)current丢失
    recover database until cancel;
    alter database open resetlogs;
    alter system set '_allow_resetlogs_corruption'=true scope=spfile
  • 相关阅读:
    Linux系统下搭建Gitlab服务器
    Sqlserver数据库表转换成C#实体类
    C# 获取今天,昨天,上周,下周,上月,下月等等一些日期格式【转】
    Funthing
    网页生成海报
    NET 5.0 Swagger API 自动生成MarkDown文档
    说说C# 8.0 新增功能Index和Range的^0是什么?
    tblive-studio vs2019 编译过程记录
    确定已安装的 .NET Framework 版本
    修改CMD默认编码
  • 原文地址:https://www.cnblogs.com/kkterry/p/3308407.html
Copyright © 2011-2022 走看看