记Oracle DG Gap解决方案

时间:2025-04-09 21:07:00
# 备库查看gap SQL> select * from v$archive_gap ; THREAD# LOW_SEQUENCE# HIGH_SEQUENCE# CON_ID ---------- ------------- -------------- ---------- 1 20 40 1 # 取消应用日志 SQL> alter database recover managed standby database cancel; Database altered. # 主库中查找v$archived_log查询gap中low_sequence#-1对应的scn(即 first_change#) SQL> select thread#, sequence#, first_change#, next_change# from v$archived_log where sequence# = 19; THREAD# SEQUENCE# FIRST_CHANGE# NEXT_CHANGE# ---------- ---------- ------------- ------------ 1 19 2897221 2920514 1 19 2897221 2920514 # 主库rman基于该scn做增量备份 [oracle@cct2 ~]$ mkdir -p /u01/rman_bak [oracle@cct2 ~]$ rman target / RMAN> run { 2> allocate channel c1 device type disk; 3> allocate channel c2 device type disk; 4> backup incremental from scn 2897221 database format '/u01/rman_bak/cctde_scn_%'; 5> release channel c1; 6> release channel c2; 7> } # 主库rman创建新的备库控制文件 rman target / RMAN> backup current controlfile for standby format '/u01/rman_bak/std_ctl.bak'; # 将备份文件拷贝到备库中 [oracle@cct2 ~]$ scp -r /u01/rman_bak/ 192.168.56.11:/u01/ # 备库shutdown并启动备库到nomount状态 SQL> shutdown immedidate; SQL> startup nomount; # 还原控制文件到备库原控制文件路径下,并启动到mount状态 [oracle@cct1 CCTDEDG]$ rman target / RMAN> restore standby controlfile from '/u01/rman_bak/std_ctl.bak'; RMAN> alter database mount; # 备库rman注册备份集,并恢复数据库 [oracle@cct1 CCTDEDG]$ rman target / RMAN> catalog start with '/u01/rman_bak/'; RMAN> recover database; RMAN> alter database open; # 备库检查是否还存在gap SQL> select * from v$archive_gap ; no rows selected # 主库检查主从同步的SCN是否趋向一致 SQL> select 1 dest_id, current_scn from v$database union all select dest_id, applied_scn from v$archive_dest where target='STANDBY'; 2 3 DEST_ID CURRENT_SCN ---------- ----------- 1 3107287 2 3107267