测试oracle删除全库之后使用rman恢复

说明:项目生产环境所使用的rman备份脚本使用的是incremental level 0进行全库备份。这里是使用了生产环境所用的备份脚本进行测试。1-3为测试步骤:

1. backup database use rman

oracle@train_ocsdb[/]$ rman target /

Recovery Manager: Release 12.2.0.1.0 - Production on Mon Jan 6 17:29:00 2020

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

connected to target database: CC (DBID=2213285106)

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/ccbackup/cf_%F';

RMAN> run {

allocate channel 'dev1' type disk;

allocate channel 'dev2' type disk;

allocate channel 'dev3' type disk;

allocate channel 'dev4' type disk;

backup incremental level 0 tag 'dbL0' format '/ccbackup/%d_Incr0_%T_%s_%u' database INCLUDE CURRENT CONTROLFILE;

backup format '/ccbackup/%d_log_%T_%U' archivelog until time 'sysdate' delete all input ;

release channel 'dev1';

release channel 'dev2';

release channel 'dev3';

release channel 'dev4';

delete noprompt obsolete;

}

2. drop database

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount;

SQL> alter system enable restricted session;

SQL> drop database;

3. recover database

  1. database started to nomount
    RMAN> startup nomount
  2. Restore spfile from backup
    RMAN> restore spfile from '/archcc/fast_recovery_area/CC/autobackup/2020_01_07/o1_mf_s_1029092020_h19zh4nw_.bkp';
    RMAN> shutdown immediate;
    RMAN> startup nomount
  3. Restore control file from backup
    RMAN> restore controlfile from '/ccbackup/cf_c-2213285106-20200107-04';
    RMAN> alter database mount;
  4. Setting recovery catalog
    RMAN> catalog start with '/ccbackup/';
  5. RMAN restore and recover database
    RMAN>run {
    allocate channel 'd1' type disk;
    allocate channel 'd2' type disk;
    allocate channel 'd3' type disk;
    allocate channel 'd4' type disk;
    restore database;
    recover database;
    release channel d1;
    release channel d2;
    release channel d3;
    release channel d4;
    }
    6.open database
    RMAN> alter database open resetlogs;

4. 问题描述

在recover database时报错如下:

这是因为控制文件太旧而导致的报错,找不到归档日志。

一般情况下,recover database都会出现以上的报错,因为归档的备份没有记录在控制文件中,alter database open resetlogs 可以打开数据库,而在incremental 0全库备份的情况下,alter database open resetlogs 会提示报错。

5. 问题分析

1. 分析备份脚本

backup incremental level 0 tag 'dbL0' format '/ccbackup/%d_Incr0_%T_%s_%u' database INCLUDE CURRENT CONTROLFILE;--- 全库备份,也备份控制文件

backup format '/ccbackup/%d_log_%T_%U' archivelog until time 'sysdate' delete all input ; ---删除现有的归档日志,然后备份新产生的归档日志。

2. 查看备份文件

由于测试rman备份期间,数据库没有任何操作,所以没有产生归档日志,rman只备份了数据文件和控制文件,没有备份归档日志。进而在恢复时会报错。

3. rman恢复步骤

首先恢复spfile,然后恢复controlfile,然后根据controlfile的信息来恢复数据文件,最后根据归档来恢复controlfile没有记录到的数据变化。

incremental 0的备份方式在恢复全库时,会去查找备份的归档日志,如果不存在,则会报错。

由于在测试时,数据库没有任何操作,没有产生新的归档日志,所以在alter database open时报错。

6. 问题解决

  1. 在rman备份期间,手动切归档:alter system switch logfile
  2. 更改脚本

run {

allocate channel 'dev1' type disk;

allocate channel 'dev2' type disk;

allocate channel 'dev3' type disk;

allocate channel 'dev4' type disk;

backup incremental level 0 format '/oradata/export/rman/%d_Incr0%T%s_%u' database;

sql 'alter system archive log current';

backup format '/oradata/export/rman/%d_log%T%U' archivelog until time 'sysdate' delete all input ;

release channel 'dev1';

release channel 'dev2';

release channel 'dev3';

release channel 'dev4';

delete noprompt obsolete;

}

  1. 总结:

1) 在生产环境中,数据库会产生归档日志,所以不会出现恢复时报错的问题。

2) backup database和incremetal 0虽然都是备份全库的命令,但是在恢复时backup database即使没有归档也能恢复,incremetal 0则必须要有归档日志。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值