• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    rman恢复方案和oracle异机恢复

    注:
    ①恢复的前提是已经做好备份
    ②完全恢复数据库是数据库遇到故障,在恢复时候没有丢失任何已经提交事物数据的恢复
    不完全恢复数据库是数据库遇到故障,在恢复时候丢失部分数据的恢复
    ③在linux下需要设置环境变量,即需要恢复的oracle数据库的实例名:export ORACLE_SID=orcl
    ④当用resetlogs启动数据库时,应该要对数据库进行一次全备份

    一、恢复方案
    1、丢失数据文件,进行完全恢复

    复制代码 代码如下:

    RMAN>startup mount;
    RMAN>restore database;
    RMAN>recover database;
    RMAn>sql 'alter database open';

    2、丢失重做日志文件,进行不完全恢复
    复制代码 代码如下:

    SQL>startup mount;
    SQL>recover database until cancel;
    SQL>alter database open resetlogs;

    3、丢失数据文件、控制文件和重做日志文件,进行不完全恢复
    复制代码 代码如下:

    RMAN>startup nomount;
    RMAN>restore controfile from autobackup;
    RMAN>alter database mount;
    RMAN>restore database;
    SQL>recover database using backup controlfile until cancel;
    SQL>alter database open resetlogs;

    4、丢失初始化文件、控制文件数据文件和重做日志文件,进行不完全恢复
    复制代码 代码如下:

    SQL>startup nomount pfile='D:\oracle\product\10.2.0\db_1\admin\orcl\pfile\init.ora.27201414210'; #pfile的路径
    RMAN>restore spfile from autobackup;
    SQL>shutdown immediate;
    SQL>startup nomount;
    RMAN>restore controlfile from autobackup;
    RMAN>alter database mount;
    RMAN>restore database;
    SQL>recover database using backup controlfile until cancel;
    SQL>alter database open resetlogs;

    5、基于时间点的恢复(常用)
    复制代码 代码如下:

    RMAN>startup mount;
    RMAN>restore database;
    RMAN>sql 'alter session set nls_date_format="yyyymmdd hh24:mi:ss"'; #设置显示时间格式
    RMAN>recover database until time '20140312 17:07:00'; #把数据库恢复到2014-03-12 17:07:00这一时间点上
    RMAN>sql 'alter database open resetlogs';

    6、基于SCN的恢复
    复制代码 代码如下:

    RMAN>startup mount;
    RMAN>restore database;
    RMAN>recover database until scn  963915;
    RMAN>sql 'alter database open resetlogs';

    ①查询当前SCN号:
    复制代码 代码如下:

    SQL>select dbms_flashback.get_system_change_number from dual;

    ②根据SCN号查询时间:
    复制代码 代码如下:

    SQL>select to_char(scn_to_timestamp(963959),'yyyymmdd hh24:mi:si') from dual;

    ③根据时间查询SCN号:
    复制代码 代码如下:

    SQL>select timestamp_to_scn(to_date('20140309 17:55:10','yyyymmdd hh24:mi:ss')) from dual;

    ④查询一段时间内的SCN号:
    复制代码 代码如下:

    SQL>select * from (select time_dp,scn from smon_scn_time order by time_dp desc) where  rownum20;

    7、深入理解incarnation:就是可以跨越resetlogs进行数据恢复
    ①每一次resetlogs就会使incarnation + 1;如果想要恢复到之前incarnation的scn,就需要先恢复到之前的incarnation;

    ②Incarnation 11 and 12都包括scn 900000 的spot,所以当incarnation 12 做 until scn的时候,是恢复到当前incarcation 的 scn;但是根据我们的需要,我们需要的是incarnation 11的scn 900000;所以就需要切换incarnation到incarnation 11,才能找回我们需要的数据。
    RMAN>reset database to incarnation 11;

    8、recover database的四条语句区别
    ① SQL>recover database using backup controlfile
    如果丢失当前控制文件,用冷备份的控制文件恢复的时候,用来告诉oracle,不要以controlfile中的scn作为恢复的终点。
    ②SQL>recover database until cancel
    如果丢失current/active redo的时候,手动指定终点。
    ③SQL>recover database using backup controlfile until cancel;
    如果丢失当前controlfile并且current/active redo都丢失,会先去自动应用归档日志,可以实现最大的恢复;
    ④SQL>recover database until cancel using backup controlfile;
    如果丢失当前controlfile并且current/active redo都丢失,以旧的redo中的scn为恢复终点,因为没有应用归档日志,所有会丢失数据。

    要理解recover database using backup controlfile,先理解 recover database;在普通的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) 。如果控制文件丢失,restore备份的控制文件后,则必须使用using backup controlfile选项。而until cancel则是不完全恢复,即current/active redo丢失,或者从restore数据库后某个归档文件缺失,则终止。
    结论:
    如果有旧的数据库备份,在归档日志和在线日志全部保存完好的情况下,使用recover database或recover database using backup controlfile,则不丢失数据
    如果存在备份数据文件restore后,归档日志或者在线日志(active、current)丢失情况下,使用recover database using backup controlfile until cancel,则可以实现最大恢复。

    二、RMAN异机恢复(源数据库和目标数据库的实例名要一致)

    1、对源数据库进行备份

    复制代码 代码如下:

    RMAN>backup database plus archivelog;
    RMAN>backup current controlfile;

    2、生成源数据库的参数文件,修改后传至目标数据库
    3、在windows平台下进行恢复
    复制代码 代码如下:

    C:\&;oradim -new -sid orcl  #创建一个orcl服务
    C:\&;set ORACLE_SID=orcl
    C:\&;sqlplus "/as sysdba";
    SQL>startup nomount pfile='C:\INITorcl.ORA';
    SQL> create spfile from pfile='C:\INITorcl.ORA';
    SQL> shutdown immediate;
    SQL>exit;
    C:\&;set ORACLE_SID=orcl
    C:\&;rman target/
    RMAN>startup nomount;
    RMAN>restore controlfile to '目标数据库控制文件放置的位置及名称' from '备份控制文件放置的位置';
    RMAN>alter database mount;
    RMAN>catalog start with '备份集放置的位置'; #向控制文件中添加备份集
    RMAN>crosscheck backup;
    RMAN>report schema;

    编写下边脚本并运行
    复制代码 代码如下:

    run
    {
    set newname for datafile 1
      to 'C:\oracle\product\10.2.0\oradata\orcl\SYSTEM.DBF';  #实例中SYSTEM.DBF放置的位置
       set newname for datafile 2
       to 'C:\oracle\product\10.2.0\oradata\orcl\UNDOTBS1.DBF';
       set newname for datafile 3
       to 'C:\oracle\product\10.2.0\oradata\orcl\SYSAUX.DBF';
       set newname for datafile 4
       to 'C:\oracle\product\10.2.0\oradata\orcl\USERS.DBF';
       set newname for datafile 5
       to 'C:\oracle\product\10.2.0\oradata\orcl\BANK_DATA02.DBF';
    restore database;
    switch datafile all;
    }
    RMAN>recover database;
    RMAN>sql 'alter database open resetlogs';

    恢复成功

    您可能感兴趣的文章:
    • Oracle数据库的备份与恢复
    • Oracle误删除表数据后的数据恢复详解
    • oracle冷备份恢复和oracle异机恢复使用方法
    • oracle如何恢复被覆盖的存储过程
    • Oracle数据库数据丢失恢复的几种方法总结
    • oracle drop table(表)数据恢复方法
    • oracle数据库创建备份与恢复脚本整理
    • ORACLE 数据库RMAN备份恢复
    • 关于系统重装后Oracle数据库完全恢复的解决办法
    • Oracle数据库恢复教程之resetlogs操作
    上一篇:catalog方式的rman备份与恢复示例
    下一篇:rman配置及rman常用命令操作
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    rman恢复方案和oracle异机恢复 rman,恢复,方案,和,oracle,