您的位置:首页 > 其它

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

2012-11-07 06:01 525 查看
我们知道,对归档下的数据库做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),这个时候最好重新备份下数据库
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: