RMAN中的恢复对应两个操作:数据库修复(restore)和数据库恢复(recover)

  数据库修复(restore):是指利用备份集的数据文件来替换已经损坏的数据库文件或者将其恢复到一个新的位置.RMAN在进行修复操作时,会利用恢复目录(没有建立恢复目录就使用目标数据库的控制文件)来获取备份信息

,并从中选择合适的备份进行恢复

  数据库修复(recover):是指应用所有重做日志,将数据库恢复到崩溃前的状态,或者应用部分REDO,将数据库恢复到指定的时间点.

  9.1RMAN恢复操作扫盲

  恢复分三个步骤

  将数据库置于正确的状态

  执行完全或者不完全恢复

  打开数据库

  1.RMAN如何选择备份集

  RMAN一开始也不知道,它只遵循固定的规则,按照你的要求去寻找合适的备份集,首先寻找最近的可用备份集

  2.RMAN恢复中的自动化

  恢复中如果备份片段出现错误,会自动寻找备份片段的冗余

  3.增量恢复和应用重做日志  

  执行rescover命令时,如果创建了增量备份,则RMAN优先选增量备份镜像恢复.

9.2.1对数据库进行完全介质恢复

(1)启动数据库到加载状态

startup mount

(2)执行恢复操作

restore database

recover database

(3)打开数据库

alter database open

上述操作是假设数据库是在归档模式下进行,如果是非归档模式,在执行restore命令前,首先需要恢复之前备份的控制文件,并且执行了restore好recover命令后,必须以open resetlogs方式打开数据库

9.3RMAN恢复实例

9.3.1归档模式有备份丢失数据文件的恢复

1,构造数据

使用scott登录新建表及插入几行数据

create table tmp1 (name varchar2(20));

insert into tmp1 values('test1');

insert into tmp1 values('test2');

insert into tmp1 values('test3');

commit;

查询

2,备份(backup database)

3,模拟数据文件丢失

shundown immediate;

删除数据文件

rm -rf /home/oracle/app/oracle/oradata/orcl/system01.dbf

无法登录数据库了

在sql启动的时候提示无法锁定数据文件1 我们不需要全库恢复只恢复数据文件1即可

rman target/

startup mount;

restore datafile 1;

recover datafile 1;

alter database open;

数据回来了

9.3.2归档模式无备份丢失数据文件的恢复

创建一个表空间books和用户并授予相应权限

create tablespace books datafile '/home/oracle/app/oracle/oradata/orcl/BOOKS01.DBF' size 100m;

create user jss identified by jss default tablespace books quota unlimited on books;

grant connect,resource to jss;

初始化一些数据

conn jss/jss

create table book_list(book_id number primary key,bookname varchar2(100),create_data date);

insert into book_list values (1,'liuyueming',sysdate);

关闭数据库删除数据文件

重启数据库会报错

此时是没有创建备份的

执行修复

首先通过alter database create datafile命令重建一个该文件,如果是由于磁盘损坏导致改文件丢失可能原路径已经无法访问,可以在创建数据文件时,指定一个新的路径.由于这里是模拟丢失,原路径可用,由此在原路径下面创建同名文件:

alter database create datafile '/home/oracle/app/oracle/oradata/orcl/BOOKS01.DBF' as '/home/oracle/app/oracle/oradata/orcl/BOOKS01.DBF';

执行recover命令修复数据文件

recover datafile 5;

打开数据库

alter database open;

测试原数据是否回来了

conn jss/jss

select * from book_list;

丢失的数据文件,从其创建时刻起所有的重做日志文件都还在,由此我们可以在重建改数据文件后,通过recover命令应用所有重做日志文件的方式,重建该数据文件中的内容.

这次修复没有动用RMAN,使用RMAN同样可以处理这种情况,操作步骤是一样的,重建数据文件这一步还是不能少

需要在sql下进行alter database create datafile '/home/oracle/app/oracle/oradata/orcl/BOOKS01.DBF' as '/home/oracle/app/oracle/oradata/orcl/BOOKS01.DBF';

restore datafile 5;

recover datafile 5;

alter database open;

9.3.3丢失控制文件的修复

在nocatalog模式下,RMAN创建的备份信息都将保存在目标数据库的控制文件中,所以一旦控制文件丢失,不仅目标数据库崩溃,连RMAN的备份信息也尽数丢失,如果这时候控制文件有备份,那还有救

1,关闭数据库

shutdown immediate

2,手动删除控制文件

rm -rf control01.ctl

这时候无法启动到mount状态了

3,连接rman

由于目标数据库的控制文件丢失了所以配置也丢失了,全恢复为默认

此时要恢复控制文件,不能直接使用restore controlfile from autobackup;命令了

4,恢复控制文件

restore controlfile from '/home/oracle/rman_backup/cf_c-1486878221-20171108-03';

5,挂载数据库

recover database;

6,打开数据库

alter database open resetlogs;

由于是通过备份的控制文件恢复,由此打开必须指定resetlogs;

验证一下

9.3.4丢失联机重做日志文件的修复

  Oracle的联机重做日志文件保存重做信息,用来循环记录oracle数据库的操作,几乎时刻都在写,由此单纯备份某个时间点的联机重做日志文件没有意义,恢复时用不上,强制恢复还可能造成数据丢失.

  由于Oracle运行过程中自动对联机重做日志进行锁定,无法通过操作系统命令删除,通常丢失联机重做日志文件是磁盘损坏导致,这里演示是shutdown后手动删除

  PS:测试可以在oracle运行中使用rm -rf 删除

9.3.4.1丢失非当前联机重做日志文件

  首先查看一下当前的联机重做日志文件是不是当前使用状态

select group#,thread#,sequence#,members,archived,status from v$log;

可以看到日志文件1 是当前状态,2,3从未使用过

查看视图对应的文件

select group#,member from v$logfile;

关闭数据库后删除非当前联机日志文件

rm -rf /home/oracle/app/oracle/oradata/orcl/redo02.log

PS:数据库正常运行,除非是关闭了重启会报错

通过命令重建即可

alter database clear logfile group 2;

对应的文件回来了

9.3.4.2丢失当前的联机重做日志文件

如果丢失的是当前的联机重做日志文件无法通过上述命令修复

执行不完全修复

如果没有最近的备份只能强制修复了

启动到nomount状态,修改一个隐藏的初始化参数

alter system set "_allow_resetlogs_corruption"=true scope=spfile;

设置该参数为true以后,在open时会跳过一些一致性检测

启动到mount状态

对数据库进行不完全修复

recover database until cancel;

打开数据库

alter database open resetlogs;

善后处理

  这种恢复办法是没有办法中的办法,通过这种方式恢复可能会导致数据库中数据不一致,如已提交的数据未写入,未提交的已经写入.如果可以顺利打开,强烈建议马上通过export逻辑导出方式执行一次full export.然后新建数据库,再通过import导入之前导出的二进制文件.

Oracle涂抹oracle学习笔记第9章RMAN说,我能恢复的更多相关文章

  1. Oracle涂抹oracle学习笔记第8章RMAN说,我能备份

    本次测试服务器为172.16.25.33 使用rman连接本地数据库 rman target / 在rman中执行启动与关闭的命令与sqlplus相同 在rman中执行sql语句 sql ‘需要执行的 ...

  2. Oracle教程之学习笔记

    Oracle教程之学习笔记... ----------------------------------- Oracle教程:---学习笔记: ============================= ...

  3. JVM学习笔记-第六章-类文件结构

    JVM学习笔记-第六章-类文件结构 6.3 Class类文件的结构 本章中,笔者只是通俗地将任意一个有效的类或接口锁应当满足的格式称为"Class文件格式",实际上它完全不需要以磁 ...

  4. Stealth视频教程学习笔记(第二章)

    Stealth视频教程学习笔记(第二章) 本文是对Unity官方视频教程Stealth的学习笔记.在此之前,本人整理了Stealth视频的英文字幕,并放到了优酷上.本文将分别对各个视频进行学习总结,提 ...

  5. Stealth视频教程学习笔记(第一章)

    Stealth视频教程学习笔记(第一章) 本文是对Unity官方视频教程Stealth的学习笔记.在此之前,本人整理了Stealth视频的英文字幕,并放到了优酷上.本文将分别对各个视频进行学习总结,提 ...

  6. 20145330《Java学习笔记》第一章课后练习8知识总结以及IDEA初次尝试

    20145330<Java学习笔记>第一章课后练习8知识总结以及IDEA初次尝试 题目: 如果C:\workspace\Hello\src中有Main.java如下: package cc ...

  7. java JDK8 学习笔记——第16章 整合数据库

    第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程 ...

  8. CSS3秘笈第三版涵盖HTML5学习笔记1~5章

    第一部分----CSS基础知识 第1章,CSS需要的HTML HTML越简单,对搜索引擎越友好 div是块级元素,span是行内元素 <section>标签包含一组相关的内容,就像一本书中 ...

  9. 《DOM Scripting》学习笔记-——第三章 DOM

    <Dom Scripting>学习笔记 第三章 DOM 本章内容: 1.节点的概念. 2.四个DOM方法:getElementById, getElementsByTagName, get ...

随机推荐

  1. JMeter学习笔记(四)

    1. 断言 断言组件是通过获取服务器响应数据,然后根据断言规则去匹配这些响应数据:匹配到是正常现象,此时我们看不到任何提醒,如果匹配不到,即出现了异常情况,此时JMeter就会断定这个事务失败,那么我 ...

  2. CConfig类

    #ifndef __CONFIG_H__ #define __CONFIG_H__ #include "GameFrameHead.h" //图片信息 struct ImageIn ...

  3. 使用ReaderWriterLock类实现多用户读/单用户写同步

    使用ReaderWriterLock类实现多用户读/单用户写同步[1] 2015-03-12 应用程序在访问资源时是进行读操作,写操作相对较少.为解决这一问题,C#提供了System.Threadin ...

  4. SAP ERP 6.0 EHP7 SR2(WINDOWS MSSQL版)安装说明

    原文 by 枫竹丹青 ⋅ 1.安装准备 1.1.版本说明 本文是描述在一个Windows虚拟机.SQL Server数据库环境下,安装SAP ERP 6.0 EHP7 SR2服务器,安装完成虚拟机文件 ...

  5. [转]对P,NP和NPC问题的解释

    总结: 归约(或别的什么叫法):如果解决了问题A,就能用解决A的方法来解决问题B,那么我们说问题B可以归约为/到问题A,本文记为[B]<[A].其含义就是问题A的求解复杂度比问题B要高,比如说A ...

  6. MDI多文档窗体--在一个窗体中装载多个窗体

    创建MDI窗体之前,首先要明确两个概念:父窗体和子窗体,在MDI窗体中,起到容器作用的窗体被称为“父窗体”, 可放在父窗体中的其他窗体被称为子窗体,也成为MDI子窗体.当应用程序启动时,首先会显示父窗 ...

  7. keepalived管理LVS文件详解

    #全局设置,只设置一个 全局路由就可以,全局路由不能重复唯一标识. global_defs { router_id LVS_01 #全局路由ID,唯一不能重复 } #实例 vrrp_instance ...

  8. 微信小程序 - mixins

    mixins 概念 可百度  参考 http://ask.seowhy.com/article/21007 大意和Python中的多重继承, java中的接口类似(java接口只是定义,实现需要子类自 ...

  9. URL 重写

    转载自:http://www.cnblogs.com/knowledgesea/archive/2012/10/08/2715350.html 一. 为了页面更有利于seo优化,url重写程序需要做出 ...

  10. error: icpc: Command not found

    交叉编译qt的程序时,出现错误:error: icpc: Command not found. 解决方法,详情查看链接. http://www.cnblogs.com/zengjfgit/p/4744 ...