背景(报警不断的假期)
最近因灰度测试环境空间问题导致删除了部分未应用的归档,从而导致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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
也有一个相似的案例,自己缺乏总结啊
3月前

1
持续而大量地阅读,不仅能让人习得新的技能和本领,更会增长自己的见识、丰富人生的体验。面对机遇和挑战时,才能更加自信从容。
3月前

评论
相关阅读
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1231次阅读
2025-03-13 11:40:53
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
747次阅读
2025-03-17 11:33:53
Oracle+Deepseek+Dify 实现数据库数据实时分析
bicewow
656次阅读
2025-03-06 09:41:49
【ORACLE】ORACLE19C在19.13版本前的一个严重BUG-24761824
DarkAthena
546次阅读
2025-03-04 14:33:31
Oracle避坑指南|同名表导出难题:如何精准排除指定用户下的表?
szrsu
506次阅读
2025-03-05 00:42:34
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
441次阅读
2025-03-13 14:38:19
Ogg23ai高手必看-MySQL Innodb Cluster跟oracle的亲密接触
曹海峰
439次阅读
2025-03-04 21:56:13
【ORACLE】char类型和sql优化器发生的“错误”反应
DarkAthena
400次阅读
2025-03-04 23:05:01
什么,oracle 主机用户被删了?原来是虚惊一场!
Lucifer三思而后行
395次阅读
2025-03-03 21:12:09
Oracle 如何修改 db_unique_name?强迫症福音!
Lucifer三思而后行
327次阅读
2025-03-12 21:27:56