一、不完全恢复特性

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. most queries (more than 90 percent) never hit the database at all but only touch the cache layer

    https://gigaom.com/2011/12/06/facebook-shares-some-secrets-on-making-mysql-scale/ Facebook shares so ...

  2. UIWebView如何获取内容高度

    iOS UIWebView如何获取到内容的高度呢?我们经常会遇到项目中需要使用UIWebView来加载H5页面,但是页面的高度并不确定,而我们前端需要根据内容的高度呈现出来,且不允许webview滚动 ...

  3. CSS 伪元素&伪类

    单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪元素 伪元素 属性 描述 CSS :first-letter 向文本的第一个字母添加特殊样式 1 :first-line 向文本的首行添加特殊 ...

  4. swt小知识点

    1 换java小图标 Image image=this.getToolkit().getImage("d:/pu1.jpg"); setIconImage(image); 2 去掉 ...

  5. asp.net如何在前台利用jquery Ajax调用后台方法

    一 :最近因为帮同事开发项目使用到了asp.net,而我又想实现Ajax异步请求....从网上查询了一下资料之后,原来在asp.net中利用Ajax调用后台方法同样很简单,为了便于自己以后查看,特将此 ...

  6. Python Decorator 和函数式编程

    看到一篇翻译不错的文章,原文链接: Python Decorator 和函数式编程

  7. VS 创建虚拟目录失败,映射到其他文件夹!

    今天,改一哥们项目!立马,问了一下原因.支支吾吾的气死LZ! 算了,就不信自己琢磨不出来!哼 找了半天,坑爹的是在Web.csproj文件中! 用txt打开,发现这个东东! <UseIIS> ...

  8. 设置irb和ri

    设置irb和ri 输入ruby -v查看是否能够显示ruby版本 现在可以 配置irb了. irb是交互式Ruby 的命令行工具,即输入一句就立即执行并给出结果. 默认的irb不够强大,现在给它配置一 ...

  9. Eclipse中实现JAVA代码的自动提示功能

    1.打开Eclipse,在.出现时进行代码提示换成任意字母+.出现时的代码提示了(.abcdefghijklmnopqrstuvwxyz):

  10. 使用Jquery解析Json基础知识

    前言 在WEB数据传输过程中,json是以文本,即字符串的轻量级形式传递的,而客户端一般用JS操作的是接收到的JSON对象,所以,JSON对象和JSON字符串之间的相互转换.JSON数据的解析是关键. ...