RMAN基于时间点恢复不完全恢复

本文详细介绍了如何使用RMAN进行基于时间点的不完全恢复,通过设置until time恢复到特定时间点,避免丢失重要事务。过程中涉及数据库incarnation状态的检查和调整,以解决恢复过程中遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们知道,对归档下的数据库做RMAN全备,当数据库挂掉之后,执行完全恢复时,可以将数据库将恢复到完全最新的状态,包括至当前时间所做的所有已提交的数据修改,保证不会丢失数据。但是执行不完全恢复时,数据库会恢复到过去的某个时间点,这意味着会缺失一些事务处理,即恢复目标时间和当前时间之间所做的所有数据修改都会丢失。在许多情况下,这就是所需要的目标,因为可能对数据库执行了某些应撤消的操作,恢复到过去某一时间点是删除那些不需要的事务处理的一种方法

1:在数据库中进行rman全备操作

2:在数据库中增加或删除某些图层,然后记录操作时间

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') time from dual;

3:基于时间点的恢复

在用RMAN恢复数据库之前,我们先查看一下数据库的incarnation信息

RMAN> list incarnation;

using target database control file instead of recovery catalog

List of Database Incarnations

DB Key  Inc Key DB Name  DB ID            STATUS    Reset SCN     Reset Time

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

1       1       DG1      1762320829       PARENT      1            30-JUN-05

2       2       DG1      1762320829       PARENT      446075       18-APR-12

3       3       DG1      1762320829       CURRENT     699141       13-JUN-12

此时数据库的状态是DB Key=3

4:还原操作,还原到某一时间点

run{

set until time "to_date('2012-09-28 12:59:00','yyyy-mm-dd hh24:mi:ss')";

restore database;

recover database;

}

数据还原后,使用命令操作更改数据库状态,打开数据库

alter database open resetlogs;

连接到数据库,查看数据是否恢复到该时间节点状态

如果在还原到改时间节点时发生如下错误:

allocated channel: t1

channel t1: sid=157 devtype=DISK

executing command: SET until clause

released channel: t1

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: failure of set command at 06/24/2012 11:11:16

RMAN-20207: UNTIL TIME or RECOVERY WINDOW is before RESETLOGS time

则是由于incarnation状态发生了变化

我们先查看一下数据库此时的incarnation状态。

RMAN> list incarnation;

List of Database Incarnations

DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time

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

1       1       DG1      1762320829       PARENT  1          30-JUN-05

2       2       DG1      1762320829       PARENT  446075     18-APR-12

3       3       DG1      1762320829       PARENT  699141     13-JUN-12

4       4       DG1      1762320829       CURRENT 729844     24-JUN-12

可以清楚的看见数据库当前的incarnation信息从恢复前的DB Key=3变为DB Key=4

当我们将数据库恢复到删除数据之后(即恢复点1),然后以resetlogs方式打开数据库,此时数据库就会以incarnation DB Key=3此时间点状态打开一个新的incarnation DB Key=4数据库(当数据库恢复成功,只要没有执行alter database open resetlogs,那么数据库incarnation就会一直处于DB Key=3的状态,此时由于归档日志和重做日志都是完整的,因此可以在此状态下恢复到自RMAN全备后的任一时间点)。4这个状态数据库的归档日志和重做日志都是空的,且只能从他打开的该时间点往后记录数据库的所有操作,而不能从该时间点回退数据库操做,因为在4状态下,没有归档日志和重做日志,因此当恢复删除数据之后,在此基础上在恢复其他数据,由于数据库处于新的状态4,没有归档日志和重组日志,所以无法在此基础上恢复数据。解决办法就是重置数据库到状态3,然后直接恢复到删除EMP表之前的时间点即可。

重置到数据状态3

RESET DATABASE TO INCARNATION 3;

然后进行恢复

run{

set until time "to_date('2012-09-28 12:59:00','yyyy-mm-dd hh24:mi:ss')";

restore database;

recover database;

}

恢复提示成功,此时我们打开数据库检查数据是否恢复成功

我们顺便来查看一下数据库的incarnation信息

RMAN> list incarnation;

List of Database Incarnations

DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time

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

1       1       DG1      1762320829       PARENT  1          30-JUN-05

2       2       DG1      1762320829       PARENT  446075     18-APR-12

3       3       DG1      1762320829       PARENT  699141     13-JUN-12

5       5       DG1      1762320829       CURRENT 729763     24-JUN-12

4       4       DG1      1762320829       ORPHAN  729844     24-JUN-12

果然又增加DB Key=5的incarnation信息

 

当对数据库执行恢复操作后,数据库就会更新incarnation状态,穿越incarnation后,将会产生孤儿incarnation(orphan),这个时候最好重新备份下数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值