rman备份exclude表空间恢复时遇到的一系列问题处理案例之一

Oracle idb 2031℃ 0评论

时间:2018年05月07日

Oracle数据库版本:11.2.0.4

今天在用RMAN恢复数据库时,遇到了【RMAN-20230: datafile copy not found in the repository】一系列问题。主要是因为源数据库备份时,排除了一个表空间的备份,这个表空间的数据以前迁移到别的数据库,但是数据没有删除。在目标测试数据库导入时,没有预习意识到这个问题。

遇到【datafile copy not found in the repository】这个错误的第一反应,可能是备份失败导致,但是查看了源数据库,发现备份是正常完成的。然后想起来之前进行过一次系统迁移,就涉及到这个表空间的数据。于是查看rman的配置参数是否有忽略某些表空间的备份。果然是忽略报错的数据文件所在的表空间PAYMENT_DATA。

数据文件在需要恢复时,v$datafile里面status列会显示状态,此时可以看到表空间PAYMENT_DATA对应的两个数据文件都是recover。

尝试使用命令offline数据文件,也依然没有改变状态,无法OPEN数据库。

在考虑到重建控制文件的方法比较麻烦,所以重新调整rman脚本:忽略PAYMENT_DATA这个表空间的数据文件。将【set newname for database to ‘+DATA/MYDB/DATAFILE/%b’;】更换为独立的【set newname for datafile……】。可以通过这样的一个SQL语句:

重新调整之后的脚本如下所示。

但是,由于源数据库是RAC双节点的集群,目标测试数据库存放redo的目录和源数据库不一样。rman恢复完归档,尝试open数据库时,报错redo目录路径不存在。

创建redo目录

再次尝试open resetlogs打开数据库,依然无法直接。上面这个错误,也导致了redo文件在clear过程中被异常中断

查看redo文件的信息,主要关注status列的信息,redo的group 3和Group 10 分别是“CLEARING_CURRENT”。如果想要数据库可以正常的打开,需要对这两个redo的文件进行手动的clear清除。

清除redo文件对应的group 3和group 10。

确认redo文件的状态,status已经没有了“CLEARING_CURRENT”。而是变成了CURRENT。

执行open命令,可以正常的open数据库,至此,问题已经解决。

总结:本次遇到的错误以及解决方法并不是唯一的。本次的解决过程主要是针对导致这个错误的原因进行的。也许有更好的方法,所以以上至少本次解决问题一种参考,不是绝对。

转载请注明:猫头鹰工作室 » rman备份exclude表空间恢复时遇到的一系列问题处理案例之一

喜欢 (0)or分享 (0)
Avatar
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址