一、不完全恢复特性

1、不完全恢复

不完全恢复仅仅是将数据恢复到某一个特定的时间点或特定的SCN,而不是当前时间点。不完全恢复会影响整个数据库,需要在MOUNT状
  态下进行。在不完全恢复成功之后,通常需要使用 resetlogs 选项来打开数据库。当使用resetlogs后,SCN 计数器不会被重置,原来的日
  志序号 log sequence 会结束,从新开始新的日志序列号。在Oracle里称之为产生一个新的incarnation。同时Oracle还会重置联机重做日
  志内容,因此resetlogs之后建议重新全备数据库。
        
2、不完全恢复的情形

介质故障(media failure)导致部分或全部联机重做日志(online redo log)损坏
      用户操作失误(user error)导致数据丢失,例如,用户由于疏忽而移除了表,提交了无效的数据到表
      由于归档重做日志(archived redo log)丢失而无法进行完全恢复(complete recovery) 
      当前控制文件(control file)丢失,必须使用备份的控制文件打开(open)数据库

3、不完全恢复的步骤

关闭数据库并备份数据库(以防止恢复失败)
      启动数据库到mount 状态
      还原所有数据文件,同时可以选择还原控制文件(注意需要还原所有数据文件,而不仅仅是受损文件)
      将数据库恢复至某个时间点、序列、或系统改变号
      使用RESETLOGS关键字打开数据库

4、注意

不完全恢复的前提条件是Oracl数据库够到mount状态,即参数文件,控制文件存在并且可用
      在做不完全恢复前建议在恢复前后做一次备份,避免恢复失败导致不必要的损失
      不完全恢复完成后,需要使用OPEN RESETLOGS 方式打开(open)数据库,并产生一个新的incarnation
      检查数据库是否恢复到正确的时间点,也就是能否找到所需的数据,如果恢复的时间点有误,需要重置数据库incarnation进行再次恢复

5、不完全介质恢复的几种类型

基于时间的恢复(Time-based recovery) 将数据恢复到指定的时间点
      用户控制的恢复(Cancel-based recovery) 当用户提交CANCEL后停止恢复(此选项在使用RMAN时无效)
      基于SCN 的恢复(Change-based recovery) 将数据恢复到指定的SCN
      按重做日志序号恢复(Log sequence recovery)将数据恢复到指定的重做日志序号(仅使用RMAN时有效)

不完全恢复的演示

A. until time 恢复(恢复到指定时间点)

--对数据库进行热备

SQL> conn /as sysdba
Connected.
SQL>
SQL> archive log list;      --查看数据库是否开启归档
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u03/ARCHLOG/
Oldest online log sequence 1
Next log sequence to archive 1
Current log sequence 1
SQL> @/u03/backup/hotbak.sql --进行热备 alter tablespace BK2 begin backup ;
ho cp /u01/app/oracle/oradata/orcl/bk02.dbf /u03/backup/hotbak
alter tablespace BK2 end backup; alter tablespace SYSAUX begin backup ;
ho cp /u01/app/oracle/oradata/orcl/sysaux01.dbf /u03/backup/hotbak
alter tablespace SYSAUX end backup; alter tablespace SYSTEM begin backup ;
ho cp /u01/app/oracle/oradata/orcl/system01.dbf /u03/backup/hotbak
alter tablespace SYSTEM end backup; alter tablespace TEST begin backup ;
ho cp /u01/app/oracle/oradata/orcl/test.dbf /u03/backup/hotbak
alter tablespace TEST end backup; alter tablespace UNDOTBS1 begin backup ;
ho cp /u01/app/oracle/oradata/orcl/undotbs01.dbf /u03/backup/hotbak
alter tablespace UNDOTBS1 end backup; alter tablespace USERS begin backup ;
ho cp /u01/app/oracle/oradata/orcl/users01.dbf /u03/backup/hotbak
alter tablespace USERS end backup;

测试

SQL> set time on;     --开启时间显示   
22:50:52 SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; --查看当前时间 TO_CHAR(SYSDATE,'YY
-------------------
2016-12-20 22:51:01
22:54:12 SQL> create table dept as select * from scott.dept;
22:54:36 SQL> create table emp as select * from scott.emp;
22:54:44 SQL> truncate table emp;
22:54:56 SQL> insert into dept select 50,'DEV','SZ' from dual; --设置这一时刻为要恢复的时间点
22:55:03 SQL> insert into dept select 60,'HR','GZ' from dual;
22:55:11 SQL> commit;
22:55:19 SQL> alter system checkpoint;
22:55:29 SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
22:56:32 SQL> startup mount;
ORACLE instance started.
Total System Global Area 805875712 bytes
Fixed Size 2217672 bytes
Variable Size 595593528 bytes
Database Buffers 201326592 bytes
Redo Buffers 6737920 bytes
Database mounted.
22:57:30 SQL> host cp /u03/backup/hotbak/*dbf /u01/app/oracle/oradata/orcl/ 22:59:58 SQL> recover database until time '2016-12-20 22:54:56';      --恢复到指定的时间点
Media recovery complete.
23:01:47 SQL> alter database open resetlogs;                  --以restlogs的方式开启数据库
23:02:45 SQL> select count(*) from emp;                       --可以看出在指定时间点前的数据都被恢复了
0
23:02:53 SQL> select * from dept;                        --插入的数据丢失
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

unitl scn 恢复(基于系统改变号的恢复)

执行热备

SQL> @/u03/backup/hotbak.sql

测试

SQL> create table dept as select * from scott.dept;
SQL> select * from dept;
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> insert into dept select 50,'DEV','SZ' from dual;
SQL> commit;
SQL> select current_scn from v$database;
1079190
SQL> insert into dept select 60,'HR','GZ' from dual;
SQL> commit;
SQL> select current_scn from v$database;
1079464
SQL> alter system checkpoint;
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 805875712 bytes
Fixed Size 2217672 bytes
Variable Size 595593528 bytes
Database Buffers 201326592 bytes
Redo Buffers 6737920 bytes
Database mounted.
SQL> host cp /u03/backup/hotbak/*dbf /u01/app/oracle/oradata/orcl/ SQL> recover database until change 1079190 --恢复到指定的SCN
Media recovery complete.
SQL> alter database open resetlogs;
SQL> select * from dept;
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 DEV SZ

until cancel 恢复(基于放弃的恢复)

这个我没亲自做实验了,可以参考

Oracle在归档模式下恢复

--> Author: Robinson Cheng --> Blog: http://blog.csdn.net/robinson_0612
sys@SYBO2SZ> @db_hot_bak -->热备数据库
sys@SYBO2SZ> select * from dept; DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 DEV SZ sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive -->当前已经存在的归档日志
total 348K
-rw-r----- 1 oracle oinstall 340K 2012-08-22 17:01 arch_792003491_1_1.arc
-rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:01 arch_792003491_1_2.arc
-rw-r----- 1 oracle oinstall 1.0K 2012-08-22 17:02 arch_792003491_1_3.arc sys@SYBO2SZ> alter system switch logfile; -->切换日志 System altered. sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive -->可以看到新增了arch_792003491_1_4.arc
total 416K
-rw-r----- 1 oracle oinstall 340K 2012-08-22 17:01 arch_792003491_1_1.arc
-rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:01 arch_792003491_1_2.arc
-rw-r----- 1 oracle oinstall 1.0K 2012-08-22 17:02 arch_792003491_1_3.arc
-rw-r----- 1 oracle oinstall 66K 2012-08-22 17:04 arch_792003491_1_4.arc sys@SYBO2SZ> insert into dept select 60,'HR','SHANGHAI' from dual; sys@SYBO2SZ> insert into dept select 70,'INFRA','HONGKONG' from dual; sys@SYBO2SZ> commit; Commit complete. sys@SYBO2SZ> alter system checkpoint; -->切换日志 System altered. sys@SYBO2SZ> alter system archive log current; System altered. sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive
total 420K
-rw-r----- 1 oracle oinstall 340K 2012-08-22 17:01 arch_792003491_1_1.arc
-rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:01 arch_792003491_1_2.arc
-rw-r----- 1 oracle oinstall 1.0K 2012-08-22 17:02 arch_792003491_1_3.arc
-rw-r----- 1 oracle oinstall 66K 2012-08-22 17:04 arch_792003491_1_4.arc
-rw-r----- 1 oracle oinstall 2.5K 2012-08-22 17:07 arch_792003491_1_5.arc sys@SYBO2SZ> insert into dept select 80,'MARKET','BEIJING' from dual; sys@SYBO2SZ> commit; Commit complete. sys@SYBO2SZ> alter system archive log current; System altered. sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive -->系统又新增了几个归档日志
total 424K
-rw-r----- 1 oracle oinstall 340K 2012-08-22 17:01 arch_792003491_1_1.arc
-rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:01 arch_792003491_1_2.arc
-rw-r----- 1 oracle oinstall 1.0K 2012-08-22 17:02 arch_792003491_1_3.arc
-rw-r----- 1 oracle oinstall 66K 2012-08-22 17:04 arch_792003491_1_4.arc
-rw-r----- 1 oracle oinstall 2.5K 2012-08-22 17:07 arch_792003491_1_5.arc
-rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:08 arch_792003491_1_6.arc sys@SYBO2SZ> ho strings /u02/database/SYBO2SZ/archive/arch_792003491_1_5.arc | grep HONGKONG -->新记录已存在于归档日志
HONGKONG sys@SYBO2SZ> ho strings /u02/database/SYBO2SZ/archive/arch_792003491_1_6.arc | grep BEIJING
BEIJING sys@SYBO2SZ> ho rm /u02/database/SYBO2SZ/archive/arch_792003491_1_5.arc -->模拟部分归档日志丢失 sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive
total 420K
-rw-r----- 1 oracle oinstall 340K 2012-08-22 17:01 arch_792003491_1_1.arc
-rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:01 arch_792003491_1_2.arc
-rw-r----- 1 oracle oinstall 1.0K 2012-08-22 17:02 arch_792003491_1_3.arc
-rw-r----- 1 oracle oinstall 66K 2012-08-22 17:04 arch_792003491_1_4.arc
-rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:08 arch_792003491_1_6.arc sys@SYBO2SZ> shutdown immediate; sys@SYBO2SZ> startup mount;
ORACLE instance started. Total System Global Area 599785472 bytes
Fixed Size 2074568 bytes
Variable Size 243271736 bytes
Database Buffers 348127232 bytes
Redo Buffers 6311936 bytes
Database mounted.
sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/SYBO*.dbf /u02/database/SYBO2SZ/oradata/. -->还原数据库 sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/sys*.dbf /u02/database/SYBO2SZ/oradata/. sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/undotbs* /u02/database/SYBO2SZ/undo/. sys@SYBO2SZ> recover database until cancel; --> 基于 cancel 恢复数据库
ORA-00279: change 494124 generated at 08/22/2012 17:02:30 needed for thread 1
ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792003491_1_4.arc
ORA-00280: change 494124 for thread 1 is in sequence #4 Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u02/database/SYBO2SZ/archive/arch_792003491_1_4.arc -->恢复到尾数为4的归档日志
ORA-00279: change 494189 generated at 08/22/2012 17:04:46 needed for thread 1
ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792003491_1_5.arc
ORA-00280: change 494189 for thread 1 is in sequence #5
ORA-00278: log file '/u02/database/SYBO2SZ/archive/arch_792003491_1_4.arc' no longer needed for this recovery Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel -->第5个日志文件丢失,输入cancel
Media recovery cancelled.
sys@SYBO2SZ> alter database open resetlogs; --> resetlogs 方式打开数据库 Database altered. sys@SYBO2SZ> select * from dept; -->由于归档日志5丢失,因此后续所有操作的数据丢失 DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 DEV SZ 5 rows selected.

Oracle的不完全恢复的更多相关文章

  1. oracle之三rman 完全恢复

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

  2. oracle之三手工完全恢复

    手工完全恢复 3.1 完全恢复:通过备份.归档日志.current log ,将database恢复到failure 前的最后一次commit状态. 3.2 完全恢复的步骤 1)restore: OS ...

  3. Oracle Recovery 01 - 常规恢复之完全恢复

    背景:这里提到的常规恢复指的是数据库有完备可用的RMAN物理备份. 实验环境:RHEL6.4 + Oracle 11.2.0.4 DG primary. 一.常规恢复之完全恢复:不丢失数据 1.1 单 ...

  4. Oracle Recovery 02 - 常规恢复之不完全恢复

    背景:这里提到的常规恢复指的是数据库有完备可用的RMAN物理备份. 实验环境:RHEL6.4 + Oracle 11.2.0.4 单实例. 二.常规恢复之不完全恢复:部分数据丢失 2.1 重做日志文件 ...

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

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

  6. Oracle—用户管理的完全恢复(一)

    一.分类 可以分为在非归档模式下和归档模式下的完全恢复,完全恢复主要是针对归档模式下的,在非归档模式下很难做到完全恢复,除非是在做恢复时,联机重做日志还没有被重写. 二.非归档的有关性质 1.在非归档 ...

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

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

  8. oracle完全恢复数据库

    完全恢复数据文件 rman target/ list backup summary; 查看是否有备份,如果没有备份,先进行全备份(应该是backup database吧) 现在模拟删除oracle数据 ...

  9. Oracle—RMAN完全恢复

    一.RMAN完全恢复的相关概念 1.在RMAN完全恢复中主要使用两个命令,一个是restore,另一个是recover. 2.可以在三个级别恢复,数据库,表空间,数据文件. 3.RMAN中应对于各种情 ...

随机推荐

  1. 理解Bitcode

    用Xcode 7 beta 3在真机(iOS 8.3)上运行一下我们的工程,结果发现工程编译不过.看了下问题,报的是以下错误: 1 ld: ‘/Users/**/Framework/SDKs/Poly ...

  2. 使用Visual Studio 2015开发Android 程序

    环境配置: 操作系统:win 7 64位 IDE:Visual Studio 2015 SDK:installer_r24.3.3-windows 安装前提: 编辑hosts文件(在附件可下载)因为安 ...

  3. linux环境下配置java WEB项目运行环境,jdk8+tomcat8+mysql5.7.11 新手向

    一:安装jdk 1.下载jdk  在oracle下载东西的时候因为oracle的一些验证机制,所以需要在链接前面添加一些参数 wget --no-check-certificate --no-cook ...

  4. form submit时将__VIEWSTATE和__VIEWSTATEGENERATOR一起post到另外的页面,出现验证视图状态 MAC 失败。

    错误信息: 验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法.不能在群集中使用 AutoGenerate. 原因分析: F ...

  5. The tag 'DataGridTextColumn' does not exist in XML namespace ....

    错误 10 The tag 'DataGridTextColumn' does not exist in XML namespace 'http://schemas.microsoft.com/win ...

  6. iOS,图片处理

    1.旋转图片 2.缩放图片 3.截取图片指定区域 4.祛除图片白色背景,弄成透明png 5.将UIView转化为UIImage,并转化为data和base64 6.将视频一帧(CMSampleBuff ...

  7. 假如 Micromedia 没被收购,会不会早于 Apple 推动 H5、CSS3 的发展

    看着如今大行其道的 H5.CSS3,想想当年的“网页三剑客”,不禁感慨:假如 Micromedia 没被收购,会不会早于 Apple 推动 H5.CSS3 的发展? 当时 Apple 先是询问 Ado ...

  8. (转) CCTextFieldTTF输入框

    CCTextFieldTTF输入框 分类: cocos2d-x 2013-04-08 16:32 2964人阅读 评论(1) 收藏 举报 新建工程,testInput 修改HelloWorldScen ...

  9. Uva 11542 乘积是平方数

    题目链接:http://vjudge.net/contest/142484#problem/A 这个题目也是2016年CCPC网赛上面的题目,当时我是不会做的,但是大牛们都知道这是一个原题,最后给一队 ...

  10. 修改linux下某一个文件夹下所有文件内容

    find /data/app_resource -type f |xargs sed -i 's/192.168.220.126/192.168.221.160/g'