一需求、模拟测试19c dg同步新建数据文件失败,如何恢复DG可用
环境:linux 7,oracle 19.10, RAC 2节点,使用了PDB
二、实验测试
2.1 场景一
主-备正常同步中! 没有配置dg datafile convert参数!
主库,通过db link从第三套库中复制克隆了一个pdb过来,dg同步新pdb数据的创建,但是由于主备路径的不同,文件创建失败,建立在了一个节点的本地文件系统;
恢复:
RMAN>recover database;方式导致DG出现大量600! 铲除dg,重新使用duplicate重建dg,恢复可用!代价太高;
2.2 场景二
主-备正常同步! 配置了datafile convert参数,针对所有主库已有cdb,pdb datafile empfile路径进行转换; 主库以本地的种子库作为模板,复制新建了一个pdb,主库目录+data/db_name/pdb_function_number/xxx 这个目录convert没有配置,dg同步文件失败! 恢复: 1.将本地临时目录文件,create调整至+DATA磁盘组; SQL> alter system set standby_file_management=MANUAL; SQL> alter database create datafile '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/UNNAMED00011' as '/home/oracle/test_temp00028'; 数据文件处于recover状态,开启MRP等待10分钟没有恢复 2.本次使用远程备份主库新建的Pdb数据文件,进行restore还原数据; RMAN>restore pluggable database tt3 from service primary_tns; service_name选择的是dg的service_names参数的值,在主库备份后,自动scp到备库,进行restore; 3.开启MRP进程,新建pdb的文件从recover=>online 这个场景新的pdb在主库未open!!!
2.3 场景三
主-备正常同步! 配置了datafile convert参数,针对所有主库已有cdb,pdb datafile empfile路径进行转换;
主库以本地的种子库作为模板,复制新建了一个pdb,主库目录+data/db_name/pdb_function_number/xxx 这个目录convert没有配置,dg同步文件失败!
恢复:
本次场景与场景二十分类似,这个场景是为了测试set newname的效果! 但是由于测试这个场景主库pdb open,因此做这个实验,除了restore pdb之后,开启MRP进程
等10分钟新的pdb文件也还是recover状态! 从主库备份最新standby controlfile ,dg覆盖后,rename file directory ,open dg!!!
1.从主库backup restore pdb name
RMAN>report schema;
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
allocate channel c5 type disk;
allocate channel c6 type disk;
set newname for pluggable database tt05 to '+DATADG/ORATEST/tt05/DATAFILE/%U';
RESTORE PLUGGABLE DATABASE TT05 FROM SERVICE 'oraxx';
switch datafile all;
}
2.启用MRP进程!
recover managed standby database using current logfile disconnect;
等待10分钟,检查发现pdb name status recover !
3.dg使用主库最新的standby controlfile进行恢复
在dg pdb open时,db alert 提示没找到可用的备份进行恢复!!! 但是实际上归档日志肯定是有的!但是控制文件无法识别最新的归档日志进行恢复操作!!!
主库备份最新的standby
SQL>ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/tt2.ctl';
备库
RMAN>restore controlfile from '/xx/tt2.ctl';
4.修改大量的文件路径!
备库restore之前进行备份现有路径,批量人工修改 datafile,tempfile,redo file!
#rename datafile directory
select 'alter database rename file '''||member||''' to '||'''+DATADG/ORAXX/ONLINELOG/'||substr(member,instr(member,'/','-1')+1)||''''||';' as "sql_text" from v$logfile where member like '+DATA%';
select 'alter database rename file '''||NAME||''' to '||'''+DATADG/ORAXX/ONLINELOG/'||substr(NAME,instr(NAME,'/','-1')+1)||''''||';' as "sql_text" from v$TEMPFILE where member like '+DATA%';
5.再次开启MRP
SQL>recover managed standby database using current logfile disconnect;
问题解决!
2.4 场景四
本次场景删除convert参数,新建一个PDB,观察DG能否自愈
DG配置了OMF 及db_create_file_dest +DATADG
主库新建一个pdb,没有open的情况下! 等待10分钟后,DG自动治愈,new pdb files status recover=>online !!!
三、总结
根据上述的4个小测试,我们可以进行汇总,如果出现路径转换的问题,如何处理:
1.开启MRP进程自愈,前提条件db_create_file_dest ,standby_file_management已配置,[排除convert失败肯定无法自愈】;
2.手工create datafile方式将文件转移至正确的路径,在开启MRP进程,能否自动处理;
3.主库对新建的pdb进行备份,dg restore pdb all files,开启MRP, 能否自动处理;
4.第三步骤不给力,在加一个主库备份最新standby controlfile=>dg 启动,注意rename数据文件、临时文件、日志文件路径及名称,能否自动恢复;
5.上述都不好使,铲掉重建整个DG!