暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

dg修复

www 2025-03-05
30

现象描述

RAC+DG主备不同步,主库上归档日志已删除且没有备份。且有新增数据文件

解决方案

主库增量备份到备库镜像换原来,来修复DG备库中的gap。

具体操作步骤

1.关闭备库同步(一般情况来说,主备不同步,mrp进程肯定是挂掉了。这一步可以省略,以防万一还是执行一下)

SQL> alter database recover managed standby database cancel;
复制

2.查询最小SCN号在备库,以最小的SCN号为主,在主库进行增量备份。

SQL> select to_char(current_scn) from v$database;
SQL> select min(checkpoint_change#) from v$datafile_header;
复制
SQL> select min(checkpoint_change#) from v$datafile_header where file# not in (select file# from v$datafile where enabled = 'READ ONLY');




3.在主库进行增量备份

rman target / RMAN> backup datafile 174,286,345 format '/bak/backup/datafile_ForStandby.bak' tag 'Forstandby'; RMAN> backup incremental from scn 3162298 database format '/bak/backup/ForStandby_%U' tag 'Fostandby'; RMAN> backup current controlfile for standby format '/bak/backup/ForStandbyctl.bck';

4.将备份拷贝至备库

scp /bak/backup/* oracle@standby:/rchldata2/backup/

5.用rman连接到备库,并恢复被用控制文件




rman target / RMAN> shutdown immediate; RMAN> startup nomount; RMAN> restore standby controlfile from '/rchldata2/backup/ForStandbyctl.bck'; RMAN> alter database mount; RMAN> catalog start with '/rchldata2/backup/';



6.在rman中执行以下脚本,恢复添加的数据文件


run { set newname for datafile 174 to '/rchldata2/dbryhc/data/ts_zhcx_gl_12.dbf'; set newname for datafile 286 to '/rchldata2/dbryhc/data/ts_zhcx_rchl_22.dbf'; set newname for datafile 345 to '/rchldata2/dbryhc/data/ts_zhcx_tl_07.dbf'; restore datafile 174,286,345; switch datafile all; }



7.待新增数据文件恢复再进行增备补数据

RMAN> recover database noredo;
复制

8.开启实时同步追归档

SQL> alter database recover managed standby database using current logfile disconnect from session;
复制

资料来源MOS 文档。


处理主备库数据文件位置不同的问题(坑)

这里被坑了一把,一开始网上随便搜索的几篇教程,都没有提到这一步,导致我执行完上一步,想打开数据库就报错,没截图,但是报错内容就是找不到数据文件巴拉巴拉,提示的路径就是主库数据文件的路径。心想玩坏了,赶紧按下面的方式查了下:

  1. select * from v$dbfile; 视图里显示的是主库数据文件的路径,想想也是刚从主库恢复了控制文件
  2. asm中查询实际备库物理文件的位置;
  3. 回看刚才RECOVER DATABASE的日志,是恢复的正确备库路径;

最后还是官方文档靠谱,下面是正确的处理方式:

Note:  We recommend checking the incarnation for primary and standby before completing this step.
--incarnation 是个啥?参考:https://www.cnblogs.com/bicewow/p/11205685.html
example:  RMAN> list incarnation;
复制



由于控制文件是从主库恢复过来的的,因此这个恢复的 STANDBY 控制文件中的数据文件位置名称将与主库数据库的数据文件位置名称相同。

如果备库和主库之间的目录结构不同,或者如果使用OMF,要在rman中使用catalog命令执行一个重命名操作。

如果主备具有相同的结构和数据文件名称,则可以跳过此步骤。

对备用数据文件所在的每个磁盘组(或目录)在STANDBY 中执行下面步骤:

RMAN> CATALOG START WITH '+DATA/STBY/datafile/';
复制



如果在备份的SCN号之后,主库增加了数据文件,那么standby_file_management参数设置auto也没用。新添加的数据文件必须restored到备用服务器。这个可以参考:Note:1531031.1

--主库查一下这个scn号之后有没有新加数据文件
SQL>SELECT FILE#, NAME FROM V$DATAFILE WHERE CREATION_CHANGE# > 3162298
复制



--没有就继续执行这个操作
RMAN> SWITCH DATABASE TO COPY;

datafile 1 switched to datafile copy "+DATA/STBY/datafile/system.297.688213333"
datafile 2 switched to datafile copy "+DATA/STBY/datafile/undotbs1.268.688213335"
datafile 3 switched to datafile copy "+DATA/STBY/datafile/sysaux.267.688213333"

--要是上面copy有报错RMAN-06571,就得挨个执行
RMAN>  switch datafile <number> to copy;

For example:
RMAN>  switch datafile 5 to copy;
复制


  • 到这里可以再执行一下第八步的操作,对比一下两次的结果
  • 这时候再次查询一下备库scn号,看看前滚有没有成功
11.配置备库使用闪回(可选)
--备库配置闪回的意义是什么?
SQL> ALTER DATABASE FLASHBACK OFF; 
SQL> ALTER DATABASE FLASHBACK ON;
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论