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

Oracle 增量修复DG同步

原创 布衣 2024-10-16
677

背景(报警不断的假期)

  最近因灰度测试环境空间问题导致删除了部分未应用的归档,从而导致DG同步延迟。当时也在国庆假期,考虑到此为灰度测试环境备库供公司开发人员内部查询使用,就没有及时追平同步。
  假期结束后,发现归档差距有点大,于是考虑通过Oracle的增量备份恢复来修复DG的同步问题。

  • 查看延迟
SQL> select value from v$dataguard_stats where name in ('apply lag'); VALUE ---------------------------------------------------------------- +5 04:33:48

Standby 查看SCN:

  • 如果scn相同直接使用,如果有差异则选最小:10789509259
SQL> SELECT to_char(CURRENT_SCN) CURRENT_SCN from V$DATABASE; CURRENT_SCN ---------------------------------------- 10789509259 SQL> select to_char(min(checkpoint_change#)) min_scn from v$datafile_header; MIN_SCN ---------------------------------------- 10789509260
  • Primary:查看是否有新增数据文件:10789509259
SQL> col NAME for a50 SQL> select file# , NAME from v$datafile where creation_change# > =10789509259; FILE# NAME ---------- -------------------------------------------------- 31 /u01/oradata/two/two_dat12.dbf 32 /u01/oradata/two/two_dat13.dbf

Primary:<SCN:10789509259>进行增量备份,新增的31、32数据文件同样需要备份

rman target / run{ allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk; allocate channel c4 type disk; crosscheck archivelog all; delete expired archivelog all; -- 删除所有已过期的归档日志文件 delete noprompt archivelog all completed before 'sysdate' ; -- 删除归档 -- 备份31、32数据文件(为断档后新增文件) backup datafile 31,32 format '/home/oracle/rman/ForStandbyDat_%U' tag 'FORSTANDBY'; backup INCREMENTAL from scn 10789509259 database format '/home/oracle/rman/dat_incre_%U'; backup current controlfile for standby reuse format '/home/oracle/rman/standby_controlfile.ctl'; release channel c1; release channel c2; release channel c3; release channel c4; }

image.png

  • 查看备份进度:
col opname format a35 col target_desc format a15 col perwork format a12 set lines 131 select sid,OPNAME,TARGET_DESC,sofar,TOTALWORK,trunc(sofar/totalwork*100,2)||'%' as perwork from v$session_longops where sofar!=totalwork and totalwork!=0;

image.png

压缩并传输:

[oracle@two_db ~]$ tar -zcvf rman.tar.gz rman/
[oracle@two_db ~]$ scp -r rman.tar.gz two_standby:/home/oracle/

Standby 恢复

  • 关库并恢复controlfile
SQL> shutdown immediate; SQL> startup nomount RMAN> restore standby controlfile from '/home/oracle/rman/standby_controlfile.ctl'; SQL> alter database mount;
  • 注册catalog
RMAN> catalog start with '/home/oracle/rman';
  • RMAN恢复31、32号数据文件
    – 新添加的数据文件必须restored到备库,无法通过备份恢复
RMAN> run { set newname for datafile 31 to '/u01/oradata/two/two_dat12.dbf'; set newname for datafile 32 to '/u01/oradata/two/two_dat13.dbf'; restore datafile 31; restore datafile 32; switch datafile all; }
  • Standby开启恢复增量备份:
    – NOREDO意思就是不应用重做日志,仅应用增量备份
RMAN>run { allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk; allocate channel c4 type disk; recover database noredo; release channel c1; release channel c2; release channel c3; release channel c4; }
  • 查看恢复进度
SQL> SELECT sid,serial#,CONTEXT,sofar,totalwork,round(sofar / totalwork * 100,2) "% Complete" FROM v$session_longops WHERE opname LIKE 'RMAN:%' AND opname NOT LIKE 'RMAN: aggregate%';

image.png

  • 由于控制文件是从主库恢复过来的,所以需要重建standby log
SQL>alter system set STANDBY_FILE_MANAGEMENT=MANUAL; SQL>alter database add standby logfile group 10 ('/u01/oradata/two/s_redo10.log') size 500M, group 11 ('/u01/oradata/two/s_redo11.log') size 500M, group 12 ('/u01/oradata/two/s_redo12.log') size 500M, group 13 ('/u01/oradata/two/s_redo13.log') size 500M, group 14 ('/u01/oradata/two/s_redo14.log') size 500M, group 15 ('/u01/oradata/two/s_redo15.log') size 500M; SQL>alter system set STANDBY_FILE_MANAGEMENT=auto;

Standby 恢复同步

  • Standby 开启日志同步进程:
SQL>alter database open read only; SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
  • Primary:激活:LOG_ARCHIVE_DEST_STATE_2
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=enable; SQL> alter system switch logfile; -- 切换日志
  • Primary alert 日志:
****************************************************************** LGWR: Setting 'active' archival for destination LOG_ARCHIVE_DEST_2 ****************************************************************** Wed Oct 16 17:34:02 2024 Archived Log entry 88573 added for thread 1 sequence 15431 ID 0xcf0caf5 dest 1: Wed Oct 16 17:52:03 2024 Thread 1 advanced to log sequence 15433 (LGWR switch) Current log# 3 seq# 15433 mem# 0: /u01/oradata/two/redo03a.log Wed Oct 16 17:52:03 2024 LNS: Standby redo logfile selected for thread 1 sequence 15433 for destination LOG_ARCHIVE_DEST_2 Wed Oct 16 17:52:03 2024 Archived Log entry 88576 added for thread 1 sequence 15432 ID 0xcf0caf5 dest 1:
  • Standby 查看同步情况:
SQL> select value from v$dataguard_stats where name in ('apply lag'); VALUE ---------------------------------------------------------------- +00 00:00:00

– 至此整个修复完成

总结

  • 操作文档下载:DG-增量恢复同步操作
  • 增量备份:是基于以全量备份(0级备份)为基础的数据块的变化进行备份。从而降低备份成本:减少备份的数据量、存储的数据量以及备份数据传输的网络带宽。
  • 本人经常使用的场景在异地灾备库扩盘,在异地保留一份备份,然后服务器在扩完盘再重做完系统,可能需要2-3天(因为是异地协调操作比较耗时)。2-3天的归档可能达到200GB+左右的归档,受限于专线带宽。增量备份就是不错的选择。(尤其异地灾备环境,非常受限于专线带宽)。

欢迎赞赏支持或留言指正
image.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
1人已赞赏
Z
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论