首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Oracle 增量修复DG同步

Oracle 增量修复DG同步

原创
作者头像
布衣530
修改2025-01-26 16:02:24
修改2025-01-26 16:02:24
3130
举报
文章被收录于专栏:Oracle DBAOracle DBA

背景(报警不断的假期)

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

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

Standby 查看SCN:

  • 如果scn相同直接使用,如果有差异则选最小:10789509259
代码语言:javascript
复制
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
代码语言:javascript
复制
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数据文件同样需要备份

代码语言:javascript
复制
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;
}
  • 查看备份进度:
代码语言:javascript
复制
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;

压缩并传输:

代码语言:javascript
复制
[oracle@two_db ~]$ tar -zcvf rman.tar.gz rman/
[oracle@two_db ~]$ scp -r rman.tar.gz two_standby:/home/oracle/

Standby 恢复

  • 关库并恢复controlfile
代码语言:javascript
复制
SQL> shutdown immediate;
SQL> startup nomount
RMAN> restore standby controlfile from '/home/oracle/rman/standby_controlfile.ctl';
SQL> alter database mount;
  • 注册catalog
代码语言:javascript
复制
RMAN> catalog start with '/home/oracle/rman';
  • RMAN恢复31、32号数据文件 – 新添加的数据文件必须restored到备库,无法通过备份恢复
代码语言:javascript
复制
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意思就是不应用重做日志,仅应用增量备份
代码语言:javascript
复制
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;
}
  • 查看恢复进度
代码语言:javascript
复制
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%';

  • 由于控制文件是从主库恢复过来的,所以需要重建standby log
代码语言:javascript
复制
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 开启日志同步进程:
代码语言:javascript
复制
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
代码语言:javascript
复制
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=enable;
SQL> alter system switch logfile; -- 切换日志
  • Primary alert 日志:
代码语言:javascript
复制
******************************************************************
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 查看同步情况:
代码语言:javascript
复制
SQL>  select value from v$dataguard_stats where name in ('apply lag');
VALUE
----------------------------------------------------------------
+00 00:00:00

– 至此整个修复完成

总结

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景(报警不断的假期)
  • Standby 查看SCN:
  • Primary:<SCN:10789509259>进行增量备份,新增的31、32数据文件同样需要备份
  • 压缩并传输:
  • Standby 恢复
  • Standby 恢复同步
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档