测试rman备份集的可用性
目录:
1、用备份集在新服务器上恢复数据库全过程
2、将备份集添加到catalog中
3、解决报错RMAN-06026、RMAN-06023
4、介绍数据库化身(Incarnation)
概述:数据库oracle 19C,备份集大小75GB左右,由于很久没有做数据库恢复,测试服务器的数据库已经与生产环境存在较大差异。于是想测试备份集的可用性,并且更新一下测试库。
源数据库为生产库,目标数据库为测试库。
一、用备份集在新服务器上恢复数据库全过程
- 应该修改spfile,注意每个服务器的有关内存的设置都不同。
create pfile from spfile; - 启动数据库到nomount状态
startup nomount - 用rman恢复控制文件
rman target /
restore controlfile from '/s3dbtest/prod1/20250716/prod1_FULL_20250716_101226_1'
控制文件的备份集提前知道是哪个文件,从源库的信息中得知。
-
启动数据库到mount状态,加载控制文件
alter database mount; -
需要将备份集的信息添加到catalog中,方法详见第二章
-
恢复数据库文件
restore database from tag 'TAG20250716T000504'; -
恢复日志文件
restore archivelog time between "to_date('2025/07/16 00:00:00','YYYY/MM/DD HH24:MI:SS')" and "to_date('2025/07/16 12:00:00','YYYY/MM/DD HH24:MI:SS')"; -
recover
sqlplus / as sysdba
recover database using backup controlfile until cancel;
- 将数据库open状态
alter database open resetlogs;
二、将备份集信息添加到catalog中
加载的控制文件是源库的,所以目标库的备份集的位置与目标库有差异,所以要将备份集信息添加到catalog中。
有两种方法:
- 备份集在一个文件夹:
catalog start with '/s3dbtest/prod1/20250716/'/s3dbtest/prod1/20250716/是备份集所在的文件夹路径 - 备份集是一个文件:
catalog backuppiece '/s3dbtest/prod1/20250716/prod1_FULL_20250716_101222_1'
之后需要交叉检查,并删除无效的信息:
crosscheck backup;
delete expired backup;
本来a按照第一章的流程就可以恢复成功,但是我因为是测试库,我以为spfile不用替换,可以直接使用,但是我忘了几个月前在测试库测试DG的搭建,所以spfile配置了主备库。所以在恢复数据文件的时候报错
三、 解决报错RMAN-06026、RMAN-06023
在备份集信息已经加载到catalog中后,list backup也能查询到信息,但是恢复数据文件就是报错:
restore database from tag 'TAG20250716T000504';
restore database from tag 'TAG20250715T000504';
Starting restore at 2025-07-17 15:10:44
using channel ORA_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 07/17/2025 15:10:44
RMAN-06026: some targets not found - aborting restore
RMAN-06023: no backup or copy of datafile 17 found to restore
RMAN-06023: no backup or copy of datafile 16 found to restore
RMAN-06023: no backup or copy of datafile 15 found to restore
RMAN-06023: no backup or copy of datafile 14 found to restore
RMAN-06023: no backup or copy of datafile 13 found to restore
RMAN-06023: no backup or copy of datafile 12 found to restore
RMAN-06023: no backup or copy of datafile 11 found to restore
RMAN-06023: no backup or copy of datafile 10 found to restore
RMAN-06023: no backup or copy of datafile 9 found to restore
RMAN-06023: no backup or copy of datafile 8 found to restore
RMAN-06023: no backup or copy of datafile 7 found to restore
RMAN-06023: no backup or copy of datafile 6 found to restore
RMAN-06023: no backup or copy of datafile 5 found to restore
RMAN-06023: no backup or copy of datafile 4 found to restore
RMAN-06023: no backup or copy of datafile 3 found to restore
RMAN-06023: no backup or copy of datafile 2 found to restore
RMAN-06023: no backup or copy of datafile 1 found to restore
在网上查询文档,有如下解决方法:
查看目标库的incarnation记录:
list incarnation;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1 1 prod1 4144310150 ORPHAN 1 2013-08-24 11:37:30
2 2 prod1 4144310150 ORPHAN 925702 2016-08-18 15:08:56
3 3 prod1 4144310150 ORPHAN 560367431 2024-12-07 23:55:56
4 4 prod1 4144310150 CURRENT 576984532 2025-03-12 17:01:05
查看源库的incarnation记录:
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 prod1 4144310150 PARENT 1 2013-08-24 11:37:30
2 2 prod1 4144310150 PARENT 925702 2016-08-18 15:08:56
3 3 prod1 4144310150 CURRENT 560367431 2024-12-07 23:55:56
源库只有三条记录,目标库有四条记录,在目标库多出的记录日期是2025-03-12 17:01:05,这个时间应该是我创建DG的时间。
只需要将目标库的多的一条信息重置就好了:
RMAN> reset database to incarnation 3;
reset database to incarnation 3;
database reset to incarnation 3
然后就不报错了。
四、介绍Incarnation:化身的概念
Current Incarnation(当前化身):数据库当前正在使用的化身。
Parent Incarnation(父化身):数据库当前化身的上一个化身。在父化身以 OPEN RESETLOGS 打开后,就生成当前化身。
Ancestor Incarnation(祖辈化身):在父化身之前,辗转生成父化身的各个化身。
Direct Ancestral Path(直接祖辈路径 / 宗谱):由数据库的起始化身辗转生成至当前化身的分支路径,包含数据库的历代祖辈及父化身。
Orphan Incarnation(孤儿化身):不在数据库当前化身的宗谱上的数据库其它化身。
Orphaned Backups(孤儿备份):不是数据库当前化身的宗谱上生成的数据库备份。当前化身不能使
首先,我们可以来看一张图,来对incarnation有个基本的了解

如图,SCN1到SCN1000过程中,数据库属于incarnation 1,一直发展到横向的SCN 2000,做了不完全恢复到了SCN 1000,此时SCN1000之后到横向的SCN2000的便是(孤儿化身)。而SCN1000向上面的SCN2000发展形成incarnation 2。incarnation 1便是incarnation 2的(父辈化身)。
而SCN2000往上继续发展到SCN3000时,又做了不完全恢复到SCN2000,SCN2000继续横向发展到SCN3000,形成incarnation 3.所以incarnation 1便是incarnation 3的(祖辈化身),incarnation 2便是incarnation 1的(祖辈化身)。
所有incarnation 1到 incarnation 3 的这条灰色轨迹便是Direct Ancestral Path。
Incarnation 1 中 SCN 1000 之后的所有备份 和Incarnation 2 中 SCN 2000 之后的所有备份便是孤儿备份。
参照之前的查询语句理解。
由于当时没有想到是DG的问题,spfile还没有改,导致最后open数据库的时候报错:
alter database open resetlogs
*
ERROR at line 1:
ORA-16649: possible failover to another database prevents this database from being opened
这个报错通常发生在Data Guard环境中,如果Oracle检测到可能存在故障转移到另一个数据库的风险
就会抛出这个错误。最后修改了spfile才解决这个报错
查询数据库化身:
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 prod1 4144310150 PARENT 1 2013-08-24 11:37:30
2 2 prod1 4144310150 PARENT 925702 2016-08-18 15:08:56
3 3 prod1 4144310150 PARENT 560367431 2024-12-07 23:55:56
4 4 prod1 4144310150 ORPHAN 576984532 2025-03-12 17:01:05
5 5 prod1 4144310150 CURRENT 601002833 2025-07-17 16:24:30
第四个已经是孤儿化身了。第五个是当前的化身,前三个都是父化身。要对比着看。

浙公网安备 33010602011771号