背景(报警不断的假期)
最近因灰度测试环境空间问题导致删除了部分未应用的归档,从而导致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;
}
- 查看备份进度:
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;
压缩并传输:
[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%';
- 由于控制文件是从主库恢复过来的,所以需要重建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+左右的归档,受限于专线带宽。增量备份就是不错的选择。(尤其异地灾备环境,非常受限于专线带宽)。
欢迎赞赏支持或留言指正
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。