Oracle RMA异机不完全恢复
这里面上传图片不是很方便,图片copy不进来,但步骤都有,如果需要图片的,请访问文档地址;https://download.csdn.net/download/qq_31144297/10597964
试验目的:A、B 两台机,把A的备份在B上还原。
试验背景:在A上误删test数据表,现需恢复;
在A主机需要做的操作如下:
- 在A数据库新增test表,并插入一些数据;(这一步应该都会,故不作演示)
- 用RMAN做全库备份;
- 切换日志(多次切换);
删除test表中的数据;(delete from test)
- 切换日志(多次切换);
- 删除test表;
Drop table test purge;
- 切换日志(多次切换);
- 创建根据spfile创建pfile文件;
- 将rman的全库备份文件及创建的pfile传入B主机;
- 日志挖掘
由于不知道是在什么时间点做的删除表的动作,所以需要对日志进行挖掘。
exec dbms_logmnr.add_logfile('日志文件',dbms_logmnr.new);
exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
select scn,sql_redo from v$logmnr_contents where lower(sql_redo) like 'drop%' and seg_owner='SYS';
执行以上3条语句进行挖掘。
因为不知道是什么时候删除的表,所以首先挖掘当前日志。
查询当前日志
可以看到当前日志组为1,组1对应的日志文件为redo01.log,吧这个文件的完整路径带入上面的语句进行挖掘即可。
如果第三条语句没有查询到结果,则表示删除操作不是在当前日志内操作的,则要继续挖掘上一个日志(归档日志);
查询归档日志路径:
其中Archive destination对应的值就是归档日志的路径。
也可通过select name,thread#,sequence#,status from v$archived_log;查询出归档日志。
从最后一个开始挖。
当挖到编号为1_125_xxxx.arc的归档日志的时候找到了
在SCN为2917972的时候做的删除动作。
当我们在B机器上恢复的时候就要恢复到这个scn当时的状态,找回test表。
在B主机需要做的操作如下:
- 使用A数据库的pfile文件生成spfile,然后将数据库启动到nomount
- 在Rman中利用A机的全库备份文件恢复controlfile;
- 将数据库启动到mount状态
- 利用rman恢复数据库到指定点;
执行:
run{
set until scn 2917972;
restore database;
recover database;
alter database open resetlogs;
}
语句,可以通过全备份文件恢复到指定的scn
但是我们执行恢复的时候提示错误,这里的意思是我们还缺少116到120号的归档日志,我们需要从A机上copy到B机的归档路径下
这里多copy了几个日志,以免又需要其他的。
然后重新执行恢复语句。
执行最后可以看到数据库已经打开了。
验证test表是否存在,且没有数据
至此,说明不完全恢复成功了。