以下就是模拟该场景的实验记录。
Oracle 11.2.0.4
192.168.80.202 source 192.168.80.203 source-vip 10.10.10.11 source-priv 192.168.80.204 source-scan
192.168.80.212 sourcedg 192.168.80.213 sourcedg-vip 10.10.10.31 sourcedg-priv 192.168.80.214 sourcedg-scan
CRSDG DATA
CRSDG DATADG
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
Database altered.
SQL> select dbid,name,current_scn,protection_mode,protection_level,database_role,force_logging,open_mode,switchover_status from v$database;
DBID NAME CURRENT_SCN PROTECTION_MODE PROTECTION_LEVEL DATABASE_ROLE FOR OPEN_MODE SWITCHOVER_STATUS
---------- --------- ----------- -------------------- -------------------- ---------------- --- -------------------- --------------------
3257785855 SOURCE 1756123 MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE PHYSICAL STANDBY YES READ ONLY NOT ALLOWED
SQL> ALTER system SET log_archive_dest_state_2 = 'defer';
System altered.
SQL> alter system switch logfile;
System altered.
SQL> /
System altered.
SQL> /
System altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination +DATA
Oldest online log sequence 133
Next log sequence to archive 136
Current log sequence 136
SQL>
SQL> /
System altered.
SQL> SQL>
SQL> /
System altered.
SQL>
SQL> /
System altered.
SQL>
SQL> select count(1) from wangjh.bb;
COUNT(1)
----------
9996
SQL>
SQL>
SQL> alter system switch logfile;
System altered.
SQL> /
System altered.
SQL>
SQL> delete from wangjh.bb where rownum<5000;
4999 rows deleted.
SQL> commit;
Commit complete.
SQL> select count(1) from wangjh.bb;
COUNT(1)
----------
4997
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination +DATA
Oldest online log sequence 140
Next log sequence to archive 143
Current log sequence 143
SQL> col name for a80
SQL> set linesize 9999 pagesize 9999
SQL> SELECT dest_id,
2 THREAD#,
3 NAME,
4 sequence#,
5 archived,
6 applied,
7 a.NEXT_CHANGE#
8 FROM v$archived_log a
9 WHERE a.sequence# >= 130
10 AND resetlogs_change# = (SELECT d.RESETLOGS_CHANGE# FROM v$database d)
11 and a.dest_id=1
12 ORDER BY a.THREAD#,a.sequence#;
DEST_ID THREAD# NAME SEQUENCE# ARC APPLIED NEXT_CHANGE#
---------- ---------- -------------------------------------------------------------------------------- ---------- --- --------- ------------
1 1 +DATA/source/archivelog/2024_01_17/thread_1_seq_130.401.1158487567 130 YES NO 1751649
1 1 +DATA/source/archivelog/2024_01_17/thread_1_seq_131.402.1158488767 131 YES NO 1753863
1 1 +DATA/source/archivelog/2024_01_17/thread_1_seq_132.403.1158489969 132 YES NO 1755667
1 1 +DATA/source/archivelog/2024_01_17/thread_1_seq_133.404.1158490481 133 YES NO 1756199
1 1 +DATA/source/archivelog/2024_01_17/thread_1_seq_134.405.1158490481 134 YES NO 1756203
1 1 +DATA/source/archivelog/2024_01_17/thread_1_seq_135.406.1158490483 135 YES NO 1756207
1 1 +DATA/source/archivelog/2024_01_17/thread_1_seq_136.407.1158490493 136 YES NO 1756221
1 1 +DATA/source/archivelog/2024_01_17/thread_1_seq_137.408.1158490495 137 YES NO 1756225
1 1 +DATA/source/archivelog/2024_01_17/thread_1_seq_138.409.1158490495 138 YES NO 1756228
1 1 +DATA/source/archivelog/2024_01_17/thread_1_seq_139.410.1158490651 139 YES NO 1756514
1 1 +DATA/source/archivelog/2024_01_17/thread_1_seq_140.411.1158490653 140 YES NO 1756520
1 1 +DATA/source/archivelog/2024_01_17/thread_1_seq_141.412.1158490683 141 YES NO 1756637
1 1 +DATA/source/archivelog/2024_01_17/thread_1_seq_142.413.1158490687 142 YES NO 1756643
13 rows selected
3)查看备库归档情况
SQL> col name for a80
SQL> set linesize 9999 pagesize 9999
SQL> SELECT dest_id,
2 THREAD#,
3 NAME,
4 sequence#,
5 archived,
6 applied,
7 a.NEXT_CHANGE#
8 FROM v$archived_log a
9 WHERE a.sequence# >= 130
10 AND resetlogs_change# = (SELECT d.RESETLOGS_CHANGE# FROM v$database d)
11 and a.dest_id=1
12 ORDER BY a.THREAD#,a.sequence#;
DEST_ID THREAD# NAME SEQUENCE# ARC APPLIED NEXT_CHANGE#
---------- ---------- -------------------------------------------------------------------------------- ---------- --- --------- ------------
1 1 +DATADG/dgsource/archivelog/2024_01_17/thread_1_seq_130.420.1158487567 130 YES YES 1751649
1 1 +DATADG/dgsource/archivelog/2024_01_17/thread_1_seq_131.422.1158488769 131 YES YES 1753863
1 1 +DATADG/dgsource/archivelog/2024_01_17/thread_1_seq_132.423.1158489969 132 YES YES 1755667
1 1 +DATADG/dgsource/archivelog/2024_01_17/thread_1_seq_133.424.1158490481 133 YES NO 1756199

ALTER system SET log_archive_dest_state_2 = 'enable';
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING
CURRENT LOGFILE DISCONNECT FROM SESSION;


SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL> select min(checkpoint_change#) from v$datafile_header
2 where file# not in (select file# from v$datafile where enabled = 'READ ONLY');
MIN(CHECKPOINT_CHANGE#)
-----------------------
1756225
RMAN> BACKUP INCREMENTAL FROM SCN 1756225 DATABASE FORMAT
'/home/oracle/oracle_bk/ORADG11G/ForStandby_%U'tag'FORSTANDBY';
scp * oracle@192.168.80.212:/home/oracle/oracle_bk/ORADG11G/


RMAN> BACKUP CURRENT CONTROLFILE FOR STANDBY FORMAT
'/tmp/ForStandbyCTRL.bck';
scp ForStandbyCTRL.bck oracle@192.168.80.212:/home/oracle/oracle_bk/ORADG11G/


RMAN> alter database mount;

SQL> SELECT FILE#,NAME FROM V$DATAFILE WHERE CREATION_CHANGE# > 1756225;
no rows selected

SQL> select GROUP# from v$logfile where TYPE='STANDBY' group by GROUP#;
GROUP#
----------
5
6
7
8
9
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 5;
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 6;
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 7;
…
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
Database altered.
SQL>select name,value from v$dataguard_stats;
NAME VALUE
-------------------- ----------------------------------------------------------------
transport lag
apply lag +00 00:00:00
apply finish time
estimated startup ti 24 me

SQL> select count(1) from wangjh.bb;
COUNT(1)
----------
4997
1)生产环境要避免这种情况发生。需要做好主备库的监控,如果有GAP产生了,需要及时定位原因(网络,IO,或者是硬件等问题)。 2)主备库根据归档的磁盘大小和产生的归档量制定好定时清理归档的脚本。

本文作者:王俊晖(上海新炬中北团队)
本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




