现在的位置: 首页 > 综合 > 正文

使用RMAN的不完全恢复-基于时间/SCN/日志序列

2013年02月07日 ⁄ 综合 ⁄ 共 2188字 ⁄ 字号 评论关闭

不完全恢复是指不完全的数据恢复,不完全恢复与完全恢复在许多方面是相同的,他们基本的命令集相同,但不完全恢复添加了一些其他命令。 引起不完全恢复的原因有很多,如丢失了联机重做日志或归档的重做日志,或者出现重大的用户错误。 不完全恢复会影响整个数据库,换句话,不能只对数据库的一部分执行不完全恢复操作,因为这个会使数据库的一部分具有与这个数据库其余部分不同的SCN和时间点。

要将数据库数据还原到与数据库剩余部分不同的时间点,可以用基于 表空间时间恢复 或者用 闪回技术。

不完全恢复方法包括:基于时间,SCN,日志序列 或取消的恢复。

1、使用resetlogslogs 命令

在不完全恢复期间,通常需要使用resetlogs命令打开数据库,这是因为我们要从已经简历的现有日志流中脱离出来,并且需要向Oracle 说明这种情况. Resetlogs 命令表示一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始. 数据库的逻辑生存期也称为一个对应物(Incarnation). 每次使用resetlogs命令都会创建一个新的数据库对应物,这对于恢复操作来说非常重要.

每次使用resetlogs命令时,SCN 计数器不会被重置,不过Oracle 会重置其他计数器(如:日志序列号),同时还会重置联机重做日志的内容.

Oracle 10g 简化了通过resetlogs命令进行的恢复,在归档的重做日志名中添加了一个新的特换串(%r),该字符串表示resetlog ID 号。 在log_archive_dest_format 参数串中包括%r时,归档的重做日志名在每个resetlogs 命令中保持唯一。 这种改动以及其他的内部Oracle 数据库改动使oracle 可以很容易的通过给定的resetlogs操作恢复数据库。 因此,可以很容易的在执行操作后立刻备份数据库,然而,我们仍然认为在任何不完全恢复后备份数据库是很有必要的。

2、建立恢复点

使用RMAN执行不完全恢复操作时需要完成一个工作是简历恢复目标。恢复目录是恢复进程的终点,通常我们基于一个时间点,一个指定的SCN 或者 一个日志序列号来表示它。 我们可以采用许多不同的方法建立恢复目标。

(1)在run 代码块中使用set 命令与until time,until SCN 或 until sequence参数

Run

{

Set until time "to_date('2010-07-05 14:02:00','yyyy-mm-dd hh24:mi:ss')";

Restore database;

Recover database alter database open resetlogs;

}

执行这条命令时,RMAN 会查找与恢复目标时间最近(并非恢复目标时间本身也不能是位于恢复目标之间的时间)的备份集,并且从这个备份集中还原数据库。 如果数据库置于noarchivelog 模式中,恢复操作会在备份集的时间停止;否则在执行recover命令期间,oracle 会在所定义的恢复目标(不包含恢复目标本身)上应用归档的重做日志(以及需要应用的任何增量备份)。

注意: 如果尝试恢复到特定备份的完成点,则必须恢复到备份集中文件的CKP SCN 或 CKP TIME,在不同备份集的RMAN list命令中会列出这些内容。 有时使用备份的CKP TIME 并不够,还可能导致ORA-1152错误。

(2)在restore 和recover 命令中直接使用until time,until SCN 和 until sequence 参数

这种方法避免使用run 代码块,也倾向与使用这种方法。

Startup mount;

Restore database until time "to_date('2010-07-05 14:02:00','yyyy-mm-dd hh24:mi:ss')";

Recover database until time "to_date('2010-07-05 14:02:00','yyyy-mm-dd hh24:mi:ss')";

Alter database open resetlogs;

3、基于时间的恢复

这种恢复类型允许用户将数据库恢复到与指定时间一致的状态。 当然,如果不存在能将数据库还原到用户请求的时间的有效备份或归档重做日志,Oracle 就会报RMAN-03002 和 RMAN-20207的错误。

必须具备在我们指定的恢复时间之前生成的数据库备份,此外还需要所有归档的重做日志。

4、基于SCN 的恢复

Oracle 允许用户将数据库恢复到指定的SCN,实际上,这并不是一种常见的恢复方法。示例如下:

Startup mount;

Restore database until SCN 1000;

Recover database until SCN 1000;

Alter database open resetlogs;

注意: 该示例可以将数据库还原到SCN 1000,但是不会包含SCN.

5、基于日志序列的恢复

RMAN 允许用户将数据库恢复到指定序列号的归档重做日志。如果归档的重做日志中存在间隙,使用这种恢复方法就非常方便。 间隙通常意味着我们只能将数据库还原到间隙的开始点。

Startup mount;

Restore database until sequence 100 thread 1;

Recover database until sequence 100 thread 1;

Alter database open resetlogs;

抱歉!评论已关闭.