日期:2014-05-16  浏览次数:20540 次

探索ORACLE之RMAN_07非一致性恢复(集合)

探索ORACLE之RMAN_07非一致性恢复(集合)

作者:吴伟龙   Name:Prodence Woo

QQ:286507175  msn:hapy-wuweilong@hotmail.com

 

     在前面的议题中实际上已经对rman的备份恢复做了个比较完整的介绍,谈到了数据库,表空间,参数文件,控制文件的备份,同时也谈到了它们的恢复,当然还包括了灾难性的恢复。对于那些恢复实际上已经用到了我们今天所要说的非一致性恢复,只不过没有说明罢了。什么叫非一致性恢复,非一致性恢复就是在恢复的过程中会有部分数据丢失。

那么非一致性恢复主要应用于在控制文件,重做日志文件,或者归档日志文件失败,数据库的完全介质恢复将无法进行的时候,为使损失达到最小,这个时候才可执行数据库的不一致性恢复。

我们可以通过如下图来理解什么是非一致性恢复:

     

 

        如图上中,数据库在100的时候已经做了全备,重做日志已经捕获了100-500之间的SCN,并同归redo应用归档,当在500的时候,数据库发生了介质失败;那么这个时候要做数据库的恢复就要用到在scn 100时做的备份以及100-500这期间所产生的归档和重做日志信息。如果说归档在scn 300的时候损坏了,那么这个时候就只能恢复到scn为200的这个点,这也就是我们说的数据库的不完全恢复.

 

非一致性恢复的类型主要分为以下四种:

  基于时间(time)恢复

  基于取消(cancel)恢复

  基于SCNchange)恢复

  基于备份控制文件(unsing backup controlfile)的恢复

 

基于时间(time)恢复

基于时间的恢复将数据库恢复到备份点与失败点之间的某个时间点。基于时间的恢复不仅在介质失败的时候使用,也可以在数据库正常运行的时候使用。例如:某个用户误删除了某个表的数据,这个时候我们可以通过基于时间的恢复来将删除的数据恢复出来,示例如下:

 

1、查看当前用户下的表,只有一张WWL001

21:07:31 SQL> select * fromtab;

 

TNAME                          TABTYPE  CLUSTERID

------------------------------------- ----------

WWL001                         TABLE

Elapsed: 00:00:00.06

 

我们通过WWL001来创建WWL002-WWL005 共四张表用来测试不完全恢复

21:08:28 SQL> create tablewwl002 as select * from wwl001;

Table created.

Elapsed: 00:00:00.17

 

21:08:55 SQL> create tablewwl003 as select * from wwl001;

Table created.

Elapsed: 00:00:00.04

 

21:09:00 SQL> create tablewwl004 as select * from wwl001;

Table created.

Elapsed: 00:00:00.03

 

21:09:06 SQL> create tablewwl005 as select * from wwl001;

Table created.

Elapsed: 00:00:00.05

如上表已经创建完成

 

2、我们在21:13:13开始删除表(请注意时间)

21:13:13 SQL> drop tablewwl002 purge;

Table dropped.

Elapsed: 00:00:00.16

 

21:13:28 SQL> drop tablewwl003 purge;

Table dropped.

Elapsed: 00:00:00.11

 

21:13:34 SQL> truncate tablewwl004;

Table truncated.

Elapsed: 00:00:00.32

 

21:13:44 SQL> truncate tablewwl005;

Table truncated.

Elapsed: 00:00:00.07

21:13:47 SQL>

 

因为我们是要做基于时间的恢复,那么我们只有将数据库恢复到21:13:13之前的这个时间段,才能把我们刚才创建的表找回来。