RMAN备份恢复数据文件找不到

背景:

    最近在隔离环境进行数据库RMAN备份恢复的时候,遇到了恢复数据文件找不到导致恢复异常终止的情况,整理了当时的问题分析情况以及修复方法。

问题复现:

    执行rman份恢复,恢复到时间点2022-04-02 17:06:00

run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
set newname for datafile 1 to '/u01/app/oracle/oradata/ORCL/system01.dbf';
set newname for datafile 3 to '/u01/app/oracle/oradata/ORCL/sysaux01.dbf';
set newname for datafile 4 to '/u01/app/oracle/oradata/ORCL/undotbs01.dbf';
set newname for datafile 5 to '/u01/app/oracle/oradata/ORCL/o1_mf_users_k4j4gl4w_.dbf';
set newname for datafile 7 to '/u01/app/oracle/oradata/ORCL/users01.dbf';
set until time "to_date('2022-04-02 17:06:00','yyyy-mm-dd hh24:mi:ss')";
restore database;
switch datafile all;
recover database;
release channel c1;
release channel c2;
release channel c3;
release channel c4;
}

         restore完成之后,进行switch datafile all出现报错,报数据文件找不到错误。

    从报错的数据文件名称可以确认,报错的文件为file 5。

    查看全量备份是否有包含file 5,从备份信息输出看,全量备份并没有包含file 5。

    查看file 5的创建时间为2022-04-02 17:05:22,即file 5是在全量备份(17:02:49)之后才新加进去,所以当前的全量备份没有包含file 5。

        到这里,我们可以得出RMAN备份恢复数据文件找不到的原因是在全量和增量的备份期间进行了数据文件添加,导致全备恢复出来的文件没有包括最新添加的数据文件,最终恢复作业报错停止。

问题分析:

        当前的备份(全量+增量)是可以覆盖恢复时间点2022-04-02 17:06:00,但由于归档日志是记录数据文件块的修改,恢复是要基于数据文件的,所以我们需要先手动创建一个空的数据文件,再让归档日志进行增量的恢复。

问题解决:

    我们继续从刚才报错的switch datafille all开始,由于数据file 5没有从备份恢复出来,所以我们只能先指定单个数据文件进行switch,跳过file 5。

​​​​​​​
switch datafile 1 to copy;
switch datafile 3 to copy;
switch datafile 4 to copy;
switch datafile 7 to copy;

        接下来跳过file 5文件所在的表空间users进行recover

run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
set until time "to_date('2022-04-02 17:06:00','yyyy-mm-dd hh24:mi:ss')";
recover database skip tablespace USERS;
release channel c1;
release channel c2;
release channel c3;
release channel c4;
}

        recover 后可以看到,除了表空间users,其他的数据文件已经恢复到时间点17点06分

        read only 打开数据库

alter database open read only;

        手动添加file 5,注意大小要和之前添加的一样,这个最好通过alert日志确认当时添加的大小。

        通过alert日志我们可以确认添加的数据文件大小为10M,所以我们也手动添加一个10M大小的数据文件。

alter database create datafile 5 as '/u01/app/oracle/oradata/ORCL/datafile/users02.dbf' size 10M;

        将数据库再次启动到mount状态下,再次进行recover,成功完成。

        重新Online表空间users的文件,并查看文件的状态,已经全部online恢复到17点06分。

        最后clear logfile+open resetlogs正常启动数据库。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值