rman 不完全恢复

9.1 rman 不完全恢复的三个标准模式:基于time、基于scn和基于sequence:

范例1:恢复过去某个时间点误操作,一般使用基于time或scn。

1)环境:有一套全备份,controlfile AUTOBACKUP设成on

RMAN> show all;

CONFIGURE CONTROLFILE AUTOBACKUP ON; //控制文件自动备份,备份目的地是flash_recovery_area

SQL> select * from scott.t1;

ID
----------
1

2) 取时间

SQL> select sysdate from dual;

SYSDATE
-------------------
2013-01-18 13:47:04

3) 删除 scott.t1中所有记录

SQL> truncate table scott.t1;

4) RMAN按时间点做不完全恢复

run {
startup force mount;
allocate channel c1 type disk;
allocate channel c2 type disk;
set until time '2013-01-18 13:47:04 ';
restore database;
recover database;
alter database open resetlogs;
}

5)验证

SQL> select * from scott.t1;

ID
----------
1

//基于scn的方法与基于time相似,语法是set until scn 6689163;

//基于日志的方法类似手工恢复的例子,语法是set until sequence 3;

*考点:不完全恢复的手工与RMAN语法比较:

手工方法 RMAN方法
-----------------------------------------------------------------
基于time until time XXX until time XXX
基于scn until change XXX until scn XXX
基于日志 until cancel until sequence XXX

范例2

恢复SPFILE或CONTROLFILE:

1)环境
SQL> select * from v$tablespace;

TS# NAME INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
0 SYSTEM YES NO YES
1 SYSAUX YES NO YES
4 USERS YES NO YES
6 EXAMPLE YES NO YES
8 TEST YES NO YES
3 TEMP NO NO YES
2 UNDOTBS1 YES NO YES

SQL> select owner,table_name,tablespace_name from dba_tables where table_name='T1';

OWNER TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------
SCOTT T1 USERS

//T1表里有一条记录

SQL> select * from scott.t1;

ID
----------
1

3)关闭数据库,然后让参数文件不起作用

SQL> shutdown abort

[oracle@timran dbs]$ rm spfiletimran.ora
[oracle@timran dbs]$ rm inittimran.ora

5) RMAN恢复参数文件

[oracle@timran ~]$ [oracle@timran ~]$ rman target /

connected to target database (not started)

RMAN> startup nomount; //没有了参数文件,SQL*PLUS是无法启动实例的,但RMAN可以,所以startup nomount一定要在RMAN下做!!!

RMAN> restore spfile from '/u01/flash_recovery_area/TIMRAN11G/autobackup/2013_01_16/';

//查看在dbs/目录下已经产生spfiletimran.ora文件。证明spfile 恢复好了。

范例3 恢复误删除表空间(已备份),RMAN必须通过备份的控制文件(即含有删除的表空间结构的老控制文件)进行恢复。

本例要做的是drop tablespace test,然后再通过不完全恢复,使数据库在drop表空间前的那一刻打开,从而恢复test表空间及t1表的内容。

1)打开告警日志,查看drop tablespace的告警信息,记下时间点

$ tail -f /u01/diag//rdbms/timran11g/timran11g/trace/alert_timran11g.log

2)删除test表空间

SQL> drop tablespace test including contents and datafiles;

3)查看告警有关信息:

Wed Jan 16 19:39:56 2013 //这个时间是你要until time的时刻
drop tablespace test including contents and datafiles
Deleted file /u01/oradata/timran11g/test01.dbf
Wed Jan 16 19:40:12 2013
Completed: drop tablespace test including contents and datafiles

4)删除所有控制文件和数据文件

SQL> shutdown abort
[oracle@timran timran11g]$ rm *.ctl
[oracle@timran timran11g]$ rm *.dbf

5)准备对drop tablespace test做不完全恢复

RMAN>run{
startup force nomount;
set dbid=3416564781;
restore controlfile from autobackup until time '2013-01-16 19:39:56';
alter database mount;
set until time '2013-01-16 19:39:56';
restore database;
recover database;
alter database open resetlogs;
}

6)验证:
SQL> select * from scott.t1;

ID
----------
1
要点:
1)不能使用当前的控制文件恢复误删除的表空间,因为当前控制文件已经没有该表空间的记录了。
2)dbid是数据库的身份证,保存在控制文件中,set dbid=对于控制文件自动恢复(from autobackup)是必要的;

范例4 表空间时间点恢复(TableSpace Point In Time Recovery)

作为一条基本原则,不完全恢复必须应用到整个数据库,即必须还原整个数据库并运用日志一起向前滚动。TSPITR是一种对个别表空间执行不
完全恢复的技术,一般是针对用户错误的删除
(或截断)了表。TSPITR的最大好处是不需要生产库停机。

我们了解一下这个过程。
前提:

1. 有一套全库备份,因为TSPITR这个过程除了复制需要恢复的表空间外,也必须复制system,sysaux和undo表空间(考点)
2. 本例设置了控制文件自动备份:RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;

1)建表空间
SQL> create tablespace abcd datafile '/u01/oradata/timran11g/abcd01.dbf' size 5m;

2)建一个测试表
create table scott.t4(c1 date) tablespace abcd;
insert into scott.t4 values(sysdate);
commit;

3)RMAN备份表空间
RMAN>backup tablespace abcd format '/u01/myrman/abcd_%s.bak';

4)取当前时间
SQL>select sysdate from dual;

SYSDATE
-------------------
2013-01-16 22:02:14

5)删除表并purge
SQL>drop table scott.t4 purge;

6)建立目录指定辅助库目标
$mkdir -p /u01/oradata/timran11g/auxdata

7)做RMAN TSPITR 并指定辅助库目的地
[oracle@timran ~]$ rman target /

RMAN> recover tablespace abcd until time '2013-01-16 22:02:14' auxiliary destination '/u01/oradata/timran11g/auxdata';
执行过程值得一读,但太长了,略了。

8)验证
SQL> alter tablespace abcd online;
SQL> select * from scott.t4;

C1
-------------------
2013-01-16 21:58:11

考点:
1)TSPITR是保持在线业务下表空间级的不完全恢复,恢复的表空间要自包含。使用TS_PITR_CHECK视图查看自包含信息。
2)TSPITR一般用于将已有的表空间恢复到过去的某个时间点,而11gR2版使用可传输表空间和数据泵技术,Oracle声明可以恢复被删除的表
空间。(PPT-II-563)
3)通过TS_PITR_OBJECTS_TO_BE_DROPPED视图,查看creation time字段可以知道截止恢复时间之后的有哪些新建对象可能丢失了。
4)完成指定表空间的TSPITR后,这个表空间之前做的备份就不能再用于以后的TSPITR。 这就是在TSPITR之后要重新备份表空间的原因。

范例5:数据块介质恢复(BMR)(PPT-II-229-236)

如果数据文件只是出现部分数据块损坏,RMAN可以尝试针对坏块进行恢复,就是说不需要恢复整个数据文件,只恢复损坏的数据块。为了保
证数据文件的一致性,块介质恢复是一个完全恢复。

介质损坏,Block format incorrect,checksum无效
逻辑损坏,Oracle internal error,checksum有效

很多方法可以发现坏块(考点):
A. ANALYZE operations
B. dbv
C. SQL queries that access the potentially corrupt block
D. DBMS_REPAIR
F. RMAN

通过设置参数,当对块读写时进行检查

DB_BLOCK_CHECKSUM 检查disk I/O讹误,缺省TYPICAL。
DB_BLOCK_CHECKING 防止memory和data讹误,缺省FALSE。
DB_LOST_WRITE_PROTECT lost write 与standy database的延迟永久写有关,缺省TYPICAL。

11g新出了一个参数,顶替了上面三个参数,它就是DB_ULTRA_SAFE(考点)。
该参数可选项:OFF(缺省)|DATA_ONLY|DATA_AND_INDEX

OFF表示,DB_ULTRA_SAFE不起作用了,仍然沿用上面三个参数值的具体指定。

RMAN在BACKUP时,可以监测到损坏的数据块,并且自动将坏块记录V$database_block_corruption中。

如果是某个查询会话击中了坏块,可能会有下面的报错:
ORA-01578: ORACLE DATA BLOCK CURRPTED(FILE #5,BLOCK #21)

对应的rman恢复命令应该是:

RMAN>blockrecover device type disk datafile 5 block 21;

11g新特性增加RMAN>recover corruption list,它和backup validate database配合使用,为的是简化数据文件坏块恢复。

例:
RMAN>BACKUP VALIDATE DATABASE;
RMAN>RECOVER CORRUPTION LIST;

BACKUP VALIDATE DATABAE 不生成备份集,它只是检查坏块,并确认所有数据文件在正确的位置上, 这条命令会在v$backup_corruption
和v$database_block_corruption视图中填充检测到的所有讹误数据块。

例:
RMAN> RECOVER CORRUPTION LIST UNITL TIME SYSDATE - 7;

注意:RMAN的块恢复是完全恢复,这里的UNTIL表示的是要使用一周前的备份做还原,它不代表不完全恢复。

考点会围绕以下知识点:

1)BMR是RMAN的一个功能,它是针对物理损坏的block进行的完全恢复,要求数据库是ARCHIVELOG模式。
2)RMAN是块级备份,备份时自动检测坏块,缺省下碰到坏块就会中断备份,除非set maxcorrupt
3)做BMR有两点前提:一个是数据库要在mount或open下, 另一个是要有坏块所在的数据文件incremental level 0备份。
4)闪回日志也可以帮助恢复坏块。

SQL> desc V$DATABASE_BLOCK_CORRUPTION;
名称 是否为空? 类型
----------------------------------------------------------------- -------- --------------------------------------------
FILE# NUMBER
BLOCK# NUMBER
BLOCKS NUMBER
CORRUPTION_CHANGE# NUMBER
CORRUPTION_TYPE VARCHAR2(9)

RMAN> recover corruption list命令修复的是CORRUPTION_TYPE列记录了MEDIA_CORRUPT的物理坏块。

范例6:归档备份(PPT-II-127)

概念:在Oracle 11g中,可以使用backup … keep命令保留比RMAN备份保留策略所指定的时间更长的备份。它可以构造能保留数年的备份(不被obsolete),归档备份之所能使备份长久保存,关键是使用keep选项覆盖掉了RMAN中缺省的保留策略。

语法:BACKUP ... KEEP {FOREVER|UNTIL TIME 'date_expt'} [RESOTRE POINT rename];

说明:

KEEP FOREVER 永不过期(需要catalog)在Oracle 11g中
KEEP UNTIL TIME 后跟一个时间长度,如表示一年:'sysdate+365'

RESOTRE POINT 的作用记录这次备份的唯一性, rename表示的scn已被记录下来,rename不能重名。

例:
RMAN>
backup datafile 4 format '/u01/myrman/%s_%t.bak'
keep until time 'sysdate+30'
restore point timranbak1;

可以查看RESOTRE POINT rename和scn的对应关系。

RMAN> list restore point all;

SCN RSP 时间 类型 时间 名称
---------------- ------------------- ---------- ------------------- ----
13400758 2014-03-13 10:10:18 TIMRANBAK

考点:
1)归档备份不受retention策略影响,也不会由delete obsolete命令自动删除掉。
2)归档备份是包含一切的备份,共四种类型:数据文件备份,spfile备份,control备份和归档日志备份。

范例7,使用image copy快速恢复数据文件(不需要restore)(PPT-II-170)

RMAN> backup as copy datafile 4 format '/u01/myrman/%s.dbf';

SQL> select file#,name from v$datafile; //看一下控制文件中datafile 4 标识的物理路径

[oracle@timran timran11g]$ rm /u01/oradata/timran11g/users01.dbf

RMAN> sql 'alter database datafile 4 offline';

RMAN> switch datafile 4 to copy; //switch命令更改了控制文件相关信息并触发resync catalog。

RMAN> recover datafile 4;

RMAN> sql 'alter database datafile 4 online';

如果还想恢复原状可以再使用SQL*PLUS
SQL>alter tablespace users offline;
[oracle@timran timran11g]$ cp /u01/myrman/34.dbf /u01/oradata/timran11g/users01.dbf
SQL>alter tablespace users rename datafile '/u01/myrman/34.dbf' to '/u01/oradata/timran11g/users01.dbf';
SQL>alter tablespace users online;

oracle之三rman 不完全恢复的更多相关文章

  1. oracle之三RMAN概述

    RMAN概述 6.1 rman的定义和功能: 1) Recovery Manager 2)建立备份和恢复的server process,在oracle server上做备份和恢复 3)rman 备份d ...

  2. oracle之三rman 完全恢复

    rman 完全恢复 8.1 recover 恢复: 1)归档 : 完全恢复和不完全恢复 2)非归档:只能恢复到最后一次备份状态(还原) 8.2 完全恢复: ----先对数据库做一个备份(如果是arch ...

  3. oracle之三手工不完全恢复

    手工不完全恢复 4.1 不完全恢复的特点: 1)让整个database 回到过去某个时间点,不能避免数据丢失. 2)想跳过坏日志而继续恢复所有其他工作是不可能的,前滚没有这个功能(考点). 3)必须以 ...

  4. oracle之三rman 备份

    rman 备份 7.1 归档方式下rman备份常用语法: 7.1.1 backup 备份 1)备份全库:1.1 RMAN> backup database format='/u01/myrman ...

  5. oracle之三rman 维护

    rman 维护 11.1 rman 使用和维护 11.2 list 命令一览 1)RMAN> list backup; 2)RMAN> list backup of tablespace ...

  6. Oracle 基于 RMAN 的不完全恢复(incomplete recovery by RMAN)

    Oracle 数据库可以实现数据库不完全恢复与完全恢复.完全恢复是将数据库恢复到最新时刻,也就是无损恢复,保证数据库无丢失的恢复.而不完全恢复则是根据需要特意将数据库恢复到某个过去的特定时间点或特定的 ...

  7. Oracle单机Rman笔记[5]---脱机异地还原

    脱机异地还原(安装一个原环境相同的linux,并安装数据库,注意不要配置安装实例) .检查/home/oracle下的.bashrc .bash_profile内容是否与原环境一致(具体看情况而定), ...

  8. ORACLE 查看RMAN的备份信息总结

    关于Oracle数据库的RMAN备份,除了邮件外,是否能通过其它方式检查RMAN备份的成功与失败呢?其实我们可以通过下面SQL脚本来检查某个时间段备份失败的记录: SELECT * FROM V$RM ...

  9. Oracle—用户管理的完全恢复(四)

    在用户管理的备份(三)中,最后打开数据库时,用了alter database open resetlogs;的命令,这里为什么用resetlogs命令? 一.resetlogs的作用 1.将当前的日志 ...

随机推荐

  1. CSS动画实例:Loading加载动画效果(一)

    一些网站或者APP在加载新东西的时候,往往会给出一个好看有趣的Loading图,大部分的Loading样式都可以使用CSS3制作出来,它不仅比直接使用gif图简单方便,还能节省加载时间和空间.下面介绍 ...

  2. CVE-2020-0796“永恒之黑”漏洞复现

    0x00 漏洞概述 Microsoft Server Message Block 3.1.1(SMBv3)协议在处理某些请求的方式中存在代码执行漏洞.攻击者可以精心构造数据包发送到SMB服务器,无需经 ...

  3. ajax、反向ajax、jsonp详解

    ajax详解 什么是ajax 其实ajax已经属于老技术了,现在几乎没人不会用了,在这里主要是把底层的东西给大家分享一下,以备应对装逼的面试官. ajax即“Asynchronous Javascri ...

  4. ImportError: No module named git

    问题:ImportError: No module named git 解决:yum install GitPython

  5. LR与LR?

    目录 逻辑回归与线性回归 逻辑回归 1.建立目标函数 2. 梯度求解 3. 实现 线性回归 1. 建立目标函数 2. 求解 3. 实现 逻辑回归与交叉熵 逻辑回归与线性回归 逻辑回归 线性回归 目标函 ...

  6. spring mvc 国际化的几种方案

    spring mvc 国际化的几种方案 首先配置我们项目的service-servlet.xml文件添加的内容如下: <bean id="messageSource" cla ...

  7. JS获取时间(当前-过去-未来)

    /** * 获取时间格式为:1970-01-01 00:00 * @param {参数} params * 属性 类型 默认值 必填 说明 * date Date new Date() 否 Date对 ...

  8. PyQt5+Caffe+Opencv搭建人脸识别登录界面

    PyQt5+Caffe+Opencv搭建人脸识别登录界面(转载) 最近开始学习Qt,结合之前学习过的caffe一起搭建了一个人脸识别登录系统的程序,新手可能有理解不到位的情况,还请大家多多指教. 我的 ...

  9. 前端测试框架 Jest

    前端测试工具一览 前端测试工具也和前端的框架一样纷繁复杂,其中常见的测试工具,大致可分为测试框架.断言库.测试覆盖率工具等几类.在正式开始本文之前,我们先来大致了解下它们: 测试框架 测试框架的作用是 ...

  10. e3mall商城的归纳总结5之修改商品分类、e3mall—content的搭建

    说在前面的话 本节基本上没有用到新的知识点.主要还是对数据库的增删改查以及创建了一个新的内容模块. 新增商品分类 由于easyUI的Tree需要三个字段(Id.state.text), [{ &quo ...