Oracle DataGuard GAP 修复手册

数据库 Oracle
DG GAP 顾名思义就是:DG不同步,当备库不能接受到一个或多个主库的归档日志文件时候,就发生了 GAP。

[[442207]]

前言

DG GAP 顾名思义就是:DG不同步,当备库不能接受到一个或多个主库的归档日志文件时候,就发生了 GAP。

那么,如果遇到GAP如何修复呢?且听我细细道来~

一、介绍

DG GAP 主要分为以下两类情况:

1、主库归档日志存在,可以通过配置 Fetch Archive Log(FAL) 参数,自动解决归档 GAP。2、主库归档日志丢失,需要 人工干预 来修复。

不同 Oracle 版本的 GAP 修复方式也不尽相同,下面分别介绍不同版本的方式!

11G 的处理步骤:

a.在主库上创建一个备库的控制文件

b.以备库的当前SCN号为起点,在主库上做一个增量备份

c.将增量备份拷贝到备库上

d.使用新的控制文件将备库启动到mount状态

e.将增量备份注册到RMAN的catalog,取消备库的恢复应用,恢复增量备份

f.开启备库的恢复进程

12C 的新特性(RECOVER … FROM SERVICE)

18C 的新特性(RECOVER STANDBY DATABASE FROM SERVICE)

Oracle随着版本的升级,逐渐将步骤缩减,进行封装,18C之后可谓是达到了所谓的一键刷新,恢复DG同步。

二、实战

下面我们通过实验来进行演示如何修复:

  • 11G常规修复
  • 12C新特性(RECOVER … FROM SERVICE)修复
  • 18C新特性(RECOVER STANDBY DATABASE FROM SERVICE)修复

三、11G常规修复

首先,模拟备库断电,主库切几个最新的归档,然后手工删掉,重新开启DG同步。

备库停止DG同步进程:

  1. sqlplus / as sysdba 
  2. ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 
  3. shutdown immediate 

主库切换多次归档:

  1. sqlplus / as sysdba 
  2. alter system switch logfile; 

主库删除最近几个归档日志:

  1. rm 1_34_1070147137.arc  
  2. rm 1_33_1070147137.arc 

备库开启同步进程:

  1. startup 
  2. ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION; 

查看GAP:

  1. sqlplus / as sysdba 
  2. SELECT * FROM V$ARCHIVE_GAP; 
  3. THREAD#    LOW_SEQUENCE# HIGH_SEQUENCE# 
  4. ---------- ------------- -------------- 
  5.  1     32     34 
  6.  
  7. SELECT max(sequence#) from v$archived_log where applied='YES'
  8. MAX(SEQUENCE#) 
  9. -------------- 
  10. 31 

📢 注意: 当前DG数据库已存在GAP,GAP日志为:32---34。

a.在主库上创建一个备库的控制文件

  1. alter database create standby controlfile as '/tmp/standby.ctl'

b.以备库的当前SCN号为起点,在主库上做一个增量备份备库查询当前 scn 号:

  1. sqlplus / as sysdba 
  2. select  to_char(current_scn) from v$database
  3. TO_CHAR(CURRENT_SCN) 
  4. ---------------------------------------- 
  5. 1086639 

确认主备GAP期间是否新增数据文件:

  1. sqlplus / as sysdba 
  2. select file# from v$datafile where creation_change# > =1086639; 

主库根据备库scn号进行增量备份:

  1. rman target / 
  2. run{ 
  3. allocate channel c1 type disk; 
  4. allocate channel c2 type disk; 
  5. backup INCREMENTAL from scn 1086639 database format '/tmp/incre_%U'
  6. release channel c1; 
  7. release channel c2; 

📢 注意: 如果存在新增数据文件,备库恢复时需要先restore新添加的数据文件。

c.将增量备份和控制文件拷贝到备库上主库拷贝增量备份和控制文件你至备库:

  1. scp incre_0* oracle@orcl_stby:/home/oracle 
  2. scp standby.ctl oracle@orcl_stby:/home/oracle 

📢 注意: 确认备库的磁盘空间是否足够存放。

d.使用新的控制文件将备库启动到mount状态备库关闭数据库实例,开启至nomount状态:

  1. sqlplus / as sysdba 
  2. shutdown immediate 
  3. startup nomount 

备库恢复新的控制文件:

  1. rman target / 
  2. restore controlfile from '/home/oracle/standby.ctl'

备库开启到mount状态:

  1. alter database mount; 

e.增量备份注册到RMAN的catalog,取消日志应用,恢复增量备份确认备库已关闭DG同步进程:

  1. sqlplus / as sysdba 
  2. ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 

备库rman注册增量备份文件:

  1. rman target / 
  2. catalog start with '/home/oracle/'
  3. YES 

备库开启恢复增量备份:

  1. recover database noredo; 

f.开启备库的恢复进程备库开启日志同步进程:

  1. sqlplus / as sysdba 
  2. alter database open read only
  3. ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION; 

主库重新激活同步:

  1. sqlplus / as sysdba 
  2. ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=defer; 
  3. ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=enable; 

查询是否存在GAP,确认主备是否同步:

  1. sqlplus / as sysdba 
  2. SELECT * FROM V$ARCHIVE_GAP; 
  3. SELECT max(sequence#) from v$archived_log where applied='YES'
  4. SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY; 

至此,DG GAP已被修复,以上方式为常规修复方式,各个版本都通用。

四、12C新特性修复

首先,模拟备库断电,主库切几个最新的归档,然后手工删掉,重新开启DG同步。

模拟GAP期间,有数据文件添加的情况:

  1. ##主库添加数据文件 
  2. alter tablespace TEST add datafile '/oradata/ORCL/test02.dbf' size 100M autoextend off

📢 注意: 当前DG数据库已存在GAP,GAP日志为:30---31 。

a.记录备库当前SCN号备库记录当前 scn 号:

  1. sqlplus / as sysdba 
  2. SELECT CURRENT_SCN FROM V$DATABASE
  3. CURRENT_SCN 
  4. ----------- 
  5. 2600487 

b.使用recover standby using service恢复采用rman的新功能,recover standby using service,通过RMAN连接到target备库,然后用主库的service执行恢复备库命令。

语法:

RECOVER DATABASE FROM SERVICE < PRIMARY DB SERVICE NAME > NOREDO USING COMPRESSED BACKUPSET;

📢 注意: 确认主库的TNS已配置,这里的< PRIMARY DB SERVICE NAME >即 TNSNAME。

c.备库启动到nomount状态,恢复控制文件备库启动到nomount状态:

  1. sqlplus / as sysdba 
  2. shutdown immediate 
  3. startup nomount 

备库通过from service恢复控制文件:

  1. rman target / 
  2. restore standby controlfile from service orcl; 

备库开启到mount状态:

  1. sqlplus / as sysdba 
  2. alter database mount; 

d.备库恢复,修复GAP检查主备GAP期间是否添加数据文件:

  1. sqlplus / as sysdba 
  2. select file# from v$datafile where creation_change# > =2600487; 
  3.  
  4. FILE# 
  5. ---------- 
  6. 13 

restore 新添加的数据文件:

  1. rman target / 
  2. run 
  3. SET NEWNAME FOR DATABASE TO '/oradata/ORCL_STBY/%f_%U'
  4. RESTORE DATAFILE 13 FROM SERVICE orcl; 

由于主备的数据文件目录不一致,需要修改controlfile中数据文件位置:

  1. rman target / 
  2. catalog start with '/oradata/ORCL_STBY'
  3. YES 
  4. SWITCH DATABASE TO COPY; 

将备库文件管理方式改为手动:

  1. sqlplus / as sysdba 
  2. alter system set standby_file_management=MANUAL; 

重命名 tempfile && logfile:

  1. sqlplus / as sysdba 
  2. ##logfile 
  3. alter database clear logfile group 1; 
  4. alter database clear logfile group 2; 
  5. alter database clear logfile group 3; 
  6. alter database clear logfile group 4; 
  7. alter database clear logfile group 5; 
  8. alter database clear logfile group 6; 
  9. alter database clear logfile group 7; 
  10. alter database rename file '/oradata/ORCL/redo03.log' to '/oradata/ORCL_STBY/redo03.log'
  11. alter database rename file '/oradata/ORCL/redo02.log' to '/oradata/ORCL_STBY/redo02.log'
  12. alter database rename file '/oradata/ORCL/redo01.log' to '/oradata/ORCL_STBY/redo01.log'
  13. alter database rename file '/oradata/ORCL/standby_redo04.log' to '/oradata/ORCL_STBY/standby_redo04.log'
  14. alter database rename file '/oradata/ORCL/standby_redo05.log' to '/oradata/ORCL_STBY/standby_redo05.log'
  15. alter database rename file '/oradata/ORCL/standby_redo06.log' to '/oradata/ORCL_STBY/standby_redo06.log'
  16. alter database rename file '/oradata/ORCL/standby_redo07.log' to '/oradata/ORCL_STBY/standby_redo07.log'
  17. ##tempfile 
  18. alter database rename file '/oradata/ORCL/temp01.dbf' to '/oradata/ORCL_STBY/temp01.dbf'
  19. alter database rename file '/oradata/ORCL/pdbseed/temp012021-04-11_06-13-50-844-AM.dbf' to '/oradata/ORCL_STBY/pdbseed/temp012021-04-11_06-13-50-844-AM.dbf'
  20. alter database rename file '/oradata/ORCL/BFA6BEE45A1E3605E053AC01A8C0DD20/datafile/o1_mf_temp_j749f5fy_.dbf' to '/oradata/ORCL_STBY/BFA6BEE45A1E3605E053AC01A8C0DD20/datafile/o1_mf_temp_j749f5fy_.dbf'

备库重命名完后再改为自动:

  1. sqlplus / as sysdba 
  2. alter system set standby_file_management=AUTO; 

恢复主备GAP:

  1. recover database from service orcl noredo using compressed backupset; 

📢 注意: 如果主备库文件目录不一致,则需要catalog切换控制文件中路径,否则报错:

e.开启备库日志应用,检查同步检查主备scn是否一致

  1. sqlplus / as sysdba 
  2. col HXFNM for a100 
  3. set line222 
  4. select HXFIL File_num,substr(HXFNM,1,40) HXFNM,fhscn from x$kcvfh; 

主库切几次归档

  1. sqlplus / as sysdba 
  2. ALTER SYSTEM ARCHIVE LOG CURRENT
  3. ALTER SYSTEM SWITCH LOGFILE; 

开启备库应用日志

  1. sqlplus / as sysdba 
  2. alter database open
  3. alter pluggable database all open
  4. ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION; 

查看备库同步是否正常

  1. sqlplus / as sysdba 
  2. set line222 
  3. col member for a60 
  4. select t1.group#,t1.thread#,t1.bytes/1024/1024,t1.status,t2.member from gv$standby_log t1,gv$logfile t2 where t1.group#=t2.group#; 

主库插入数据

  1. sqlplus test/test@pdb01 
  2. insert into test values (999); 
  3. commit

备库查询是否实时同步

  1. alter session set container=pdb01; 
  2. select * from test.test; 
  3. ID 
  4. ---------- 
  5. 999 

至此,GAP已修复完成,可以发现,12C这个新特性,将一些步骤进行了省略和封装,进一步减少了我们的操作步骤,但是内部的原理仍然是一致的。

五、18C新特性恢复

18C 新特性是在 12C 的基础上,将 RECOVER STANDBY DATABASE 命令与 FROM SERVICE 子句一起使用,以通过对主数据库进行的更改来刷新物理备用数据库。备库可以直接在开启状态进行刷新。

语法:

RECOVER STANDBY DATABASE FROM SERVICE primary_db;

首先,模拟备库断电,主库切几个最新的归档,然后手工删掉,重新开启DG同步。

模拟GAP期间,有数据文件添加的情况:

  1. ##主库添加数据文件 
  2. alter tablespace TEST add datafile '/oradata/ORCL/test02.dbf' size 100M autoextend off

📢 注意: 当前 DG 数据库已存在 GAP,GAP 日志为:69---70。

a、执行RECOVER STANDBY DATABASE FROM SERVICE刷新备库下面演示一下,如何使用一行命令在线修复DG GAP:

备库取消日志应用:

  1. sqlplus / as sysdba 
  2. ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 

备库执行修复命令,开始在线刷新备库:

  1. rman target / 
  2. RMAN> RECOVER STANDBY DATABASE FROM SERVICE orcl; 
  3.  
  4. Starting recover at 19-APR-21 
  5. using target database control file instead of recovery catalog 
  6. Oracle instance started 
  7.  
  8. Total System Global Area3355441944 bytes 
  9.  
  10. Fixed Size 9141016 bytes 
  11. Variable Size671088640 bytes 
  12. Database Buffers2667577344 bytes 
  13. Redo Buffers   7634944 bytes 
  14.  
  15. contents of Memory Script: 
  16.    restore standby controlfile from service  'orcl'
  17.    alter database mount standby database
  18. executing Memory Script 
  19.  
  20. Starting restore at 19-APR-21 
  21. allocated channel: ORA_DISK_1 
  22. channel ORA_DISK_1: SID=502 device type=DISK 
  23.  
  24. channel ORA_DISK_1: starting datafile backup set restore 
  25. channel ORA_DISK_1: using network backup set from service orcl 
  26. channel ORA_DISK_1: restoring control file 
  27. channel ORA_DISK_1: restore complete, elapsed time: 00:00:02 
  28. output file name=/oradata/ORCL_STBY/control01.ctl 
  29. output file name=/oradata/ORCL_STBY/control02.ctl 
  30. Finished restore at 19-APR-21 
  31.  
  32. released channel: ORA_DISK_1 
  33. Statement processed 
  34. Executing: alter system set standby_file_management=manual 
  35.  
  36. contents of Memory Script: 
  37. set newname for tempfile  1 to  
  38.  "/oradata/ORCL_STBY/temp01.dbf"
  39. set newname for tempfile  2 to  
  40.  "/oradata/ORCL_STBY/pdbseed/temp012021-04-11_06-13-50-844-AM.dbf"
  41. set newname for tempfile  3 to  
  42.  "/oradata/ORCL_STBY/BFA6BEE45A1E3605E053AC01A8C0DD20/datafile/o1_mf_temp_j749f5fy_.dbf"
  43.    switch tempfile all
  44. set newname for datafile  1 to  
  45.  "/oradata/ORCL_STBY/system01.dbf"
  46. set newname for datafile  3 to  
  47.  "/oradata/ORCL_STBY/sysaux01.dbf"
  48. set newname for datafile  4 to  
  49.  "/oradata/ORCL_STBY/undotbs01.dbf"
  50. set newname for datafile  5 to  
  51.  "/oradata/ORCL_STBY/pdbseed/system01.dbf"
  52. set newname for datafile  6 to  
  53.  "/oradata/ORCL_STBY/pdbseed/sysaux01.dbf"
  54. set newname for datafile  7 to  
  55.  "/oradata/ORCL_STBY/users01.dbf"
  56. set newname for datafile  8 to  
  57.  "/oradata/ORCL_STBY/pdbseed/undotbs01.dbf"
  58. set newname for datafile  9 to  
  59.  "/oradata/ORCL_STBY/PDB01/o1_mf_system_j749f5d5_.dbf"
  60. set newname for datafile  10 to  
  61.  "/oradata/ORCL_STBY/PDB01/o1_mf_sysaux_j749f5fw_.dbf"
  62. set newname for datafile  11 to  
  63.  "/oradata/ORCL_STBY/PDB01/o1_mf_undotbs1_j749f5fx_.dbf"
  64. set newname for datafile  12 to  
  65.  "/oradata/ORCL_STBY/test01.dbf"
  66. set newname for datafile  14 to  
  67.  "/oradata/ORCL/test02.dbf"
  68.    restore from service  'orcl' datafile 
  69. 14; 
  70.    catalog datafilecopy  "/oradata/ORCL_STBY/system01.dbf",  
  71.  "/oradata/ORCL_STBY/sysaux01.dbf",  
  72.  "/oradata/ORCL_STBY/undotbs01.dbf",  
  73.  "/oradata/ORCL_STBY/pdbseed/system01.dbf",  
  74.  "/oradata/ORCL_STBY/pdbseed/sysaux01.dbf",  
  75.  "/oradata/ORCL_STBY/users01.dbf",  
  76.  "/oradata/ORCL_STBY/pdbseed/undotbs01.dbf",  
  77.  "/oradata/ORCL_STBY/PDB01/o1_mf_system_j749f5d5_.dbf",  
  78.  "/oradata/ORCL_STBY/PDB01/o1_mf_sysaux_j749f5fw_.dbf",  
  79.  "/oradata/ORCL_STBY/PDB01/o1_mf_undotbs1_j749f5fx_.dbf",  
  80.  "/oradata/ORCL_STBY/test01.dbf",  
  81.  "/oradata/ORCL/test02.dbf"
  82.    switch datafile all
  83. executing Memory Script 
  84.  
  85. executing command: SET NEWNAME 
  86.  
  87. executing command: SET NEWNAME 
  88.  
  89. executing command: SET NEWNAME 
  90.  
  91. renamed tempfile 1 to /oradata/ORCL_STBY/temp01.dbf in control file 
  92. renamed tempfile 2 to /oradata/ORCL_STBY/pdbseed/temp012021-04-11_06-13-50-844-AM.dbf in control file 
  93. renamed tempfile 3 to /oradata/ORCL_STBY/BFA6BEE45A1E3605E053AC01A8C0DD20/datafile/o1_mf_temp_j749f5fy_.dbf in control file 
  94.  
  95. executing command: SET NEWNAME 
  96.  
  97. executing command: SET NEWNAME 
  98.  
  99. executing command: SET NEWNAME 
  100.  
  101. executing command: SET NEWNAME 
  102.  
  103. executing command: SET NEWNAME 
  104.  
  105. executing command: SET NEWNAME 
  106.  
  107. executing command: SET NEWNAME 
  108.  
  109. executing command: SET NEWNAME 
  110.  
  111. executing command: SET NEWNAME 
  112.  
  113. executing command: SET NEWNAME 
  114.  
  115. executing command: SET NEWNAME 
  116.  
  117. executing command: SET NEWNAME 
  118.  
  119. Starting restore at 19-APR-21 
  120. allocated channel: ORA_DISK_1 
  121. channel ORA_DISK_1: SID=504 device type=DISK 
  122.  
  123. channel ORA_DISK_1: starting datafile backup set restore 
  124. channel ORA_DISK_1: using network backup set from service orcl 
  125. channel ORA_DISK_1: specifying datafile(s) to restore from backup set 
  126. channel ORA_DISK_1: restoring datafile 00014 to /oradata/ORCL/test02.dbf 
  127. channel ORA_DISK_1: restore complete, elapsed time: 00:00:03 
  128. Finished restore at 19-APR-21 
  129.  
  130. cataloged datafile copy 
  131. datafile copy file name=/oradata/ORCL_STBY/system01.dbf RECID=4 STAMP=1070263316 
  132. cataloged datafile copy 
  133. datafile copy file name=/oradata/ORCL_STBY/sysaux01.dbf RECID=5 STAMP=1070263317 
  134. cataloged datafile copy 
  135. datafile copy file name=/oradata/ORCL_STBY/undotbs01.dbf RECID=6 STAMP=1070263317 
  136. cataloged datafile copy 
  137. datafile copy file name=/oradata/ORCL_STBY/pdbseed/system01.dbf RECID=7 STAMP=1070263317 
  138. cataloged datafile copy 
  139. datafile copy file name=/oradata/ORCL_STBY/pdbseed/sysaux01.dbf RECID=8 STAMP=1070263318 
  140. cataloged datafile copy 
  141. datafile copy file name=/oradata/ORCL_STBY/users01.dbf RECID=9 STAMP=1070263318 
  142. cataloged datafile copy 
  143. datafile copy file name=/oradata/ORCL_STBY/pdbseed/undotbs01.dbf RECID=10 STAMP=1070263318 
  144. cataloged datafile copy 
  145. datafile copy file name=/oradata/ORCL_STBY/PDB01/o1_mf_system_j749f5d5_.dbf RECID=11 STAMP=1070263318 
  146. cataloged datafile copy 
  147. datafile copy file name=/oradata/ORCL_STBY/PDB01/o1_mf_sysaux_j749f5fw_.dbf RECID=12 STAMP=1070263318 
  148. cataloged datafile copy 
  149. datafile copy file name=/oradata/ORCL_STBY/PDB01/o1_mf_undotbs1_j749f5fx_.dbf RECID=13 STAMP=1070263318 
  150. cataloged datafile copy 
  151. datafile copy file name=/oradata/ORCL_STBY/test01.dbf RECID=14 STAMP=1070263318 
  152. cataloged datafile copy 
  153. datafile copy file name=/oradata/ORCL/test02.dbf RECID=15 STAMP=1070263318 
  154.  
  155. datafile 14 switched to datafile copy 
  156. input datafile copy RECID=15 STAMP=1070263318 file name=/oradata/ORCL/test02.dbf 
  157. datafile 1 switched to datafile copy 
  158. input datafile copy RECID=4 STAMP=1070263316 file name=/oradata/ORCL_STBY/system01.dbf 
  159. datafile 3 switched to datafile copy 
  160. input datafile copy RECID=5 STAMP=1070263317 file name=/oradata/ORCL_STBY/sysaux01.dbf 
  161. datafile 4 switched to datafile copy 
  162. input datafile copy RECID=6 STAMP=1070263317 file name=/oradata/ORCL_STBY/undotbs01.dbf 
  163. datafile 5 switched to datafile copy 
  164. input datafile copy RECID=7 STAMP=1070263317 file name=/oradata/ORCL_STBY/pdbseed/system01.dbf 
  165. datafile 6 switched to datafile copy 
  166. input datafile copy RECID=8 STAMP=1070263318 file name=/oradata/ORCL_STBY/pdbseed/sysaux01.dbf 
  167. datafile 7 switched to datafile copy 
  168. input datafile copy RECID=9 STAMP=1070263318 file name=/oradata/ORCL_STBY/users01.dbf 
  169. datafile 8 switched to datafile copy 
  170. input datafile copy RECID=10 STAMP=1070263318 file name=/oradata/ORCL_STBY/pdbseed/undotbs01.dbf 
  171. datafile 9 switched to datafile copy 
  172. input datafile copy RECID=11 STAMP=1070263318 file name=/oradata/ORCL_STBY/PDB01/o1_mf_system_j749f5d5_.dbf 
  173. datafile 10 switched to datafile copy 
  174. input datafile copy RECID=12 STAMP=1070263318 file name=/oradata/ORCL_STBY/PDB01/o1_mf_sysaux_j749f5fw_.dbf 
  175. datafile 11 switched to datafile copy 
  176. input datafile copy RECID=13 STAMP=1070263318 file name=/oradata/ORCL_STBY/PDB01/o1_mf_undotbs1_j749f5fx_.dbf 
  177. datafile 12 switched to datafile copy 
  178. input datafile copy RECID=14 STAMP=1070263318 file name=/oradata/ORCL_STBY/test01.dbf 
  179. Executing: alter database rename file '/oradata/ORCL/redo01.log' to '/oradata/ORCL_STBY/redo01.log' 
  180. Executing: alter database rename file '/oradata/ORCL/redo02.log' to '/oradata/ORCL_STBY/redo02.log' 
  181. Executing: alter database rename file '/oradata/ORCL/redo03.log' to '/oradata/ORCL_STBY/redo03.log' 
  182.  
  183. contents of Memory Script: 
  184.   recover database from service  'orcl'
  185. executing Memory Script 
  186.  
  187. Starting recover at 19-APR-21 
  188. using channel ORA_DISK_1 
  189. skipping datafile 5; already restored to SCN 2155383 
  190. skipping datafile 6; already restored to SCN 2155383 
  191. skipping datafile 8; already restored to SCN 2155383 
  192. skipping datafile 14; already restored to SCN 2658548 
  193. channel ORA_DISK_1: starting incremental datafile backup set restore 
  194. channel ORA_DISK_1: using network backup set from service orcl 
  195. destination for restore of datafile 00001: /oradata/ORCL_STBY/system01.dbf 
  196. channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 
  197. channel ORA_DISK_1: starting incremental datafile backup set restore 
  198. channel ORA_DISK_1: using network backup set from service orcl 
  199. destination for restore of datafile 00003: /oradata/ORCL_STBY/sysaux01.dbf 
  200. channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 
  201. channel ORA_DISK_1: starting incremental datafile backup set restore 
  202. channel ORA_DISK_1: using network backup set from service orcl 
  203. destination for restore of datafile 00004: /oradata/ORCL_STBY/undotbs01.dbf 
  204. channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 
  205. channel ORA_DISK_1: starting incremental datafile backup set restore 
  206. channel ORA_DISK_1: using network backup set from service orcl 
  207. destination for restore of datafile 00007: /oradata/ORCL_STBY/users01.dbf 
  208. channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 
  209. channel ORA_DISK_1: starting incremental datafile backup set restore 
  210. channel ORA_DISK_1: using network backup set from service orcl 
  211. destination for restore of datafile 00009: /oradata/ORCL_STBY/PDB01/o1_mf_system_j749f5d5_.dbf 
  212. channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 
  213. channel ORA_DISK_1: starting incremental datafile backup set restore 
  214. channel ORA_DISK_1: using network backup set from service orcl 
  215. destination for restore of datafile 00010: /oradata/ORCL_STBY/PDB01/o1_mf_sysaux_j749f5fw_.dbf 
  216. channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 
  217. channel ORA_DISK_1: starting incremental datafile backup set restore 
  218. channel ORA_DISK_1: using network backup set from service orcl 
  219. destination for restore of datafile 00011: /oradata/ORCL_STBY/PDB01/o1_mf_undotbs1_j749f5fx_.dbf 
  220. channel ORA_DISK_1: restore complete, elapsed time: 00:00:02 
  221. channel ORA_DISK_1: starting incremental datafile backup set restore 
  222. channel ORA_DISK_1: using network backup set from service orcl 
  223. destination for restore of datafile 00012: /oradata/ORCL_STBY/test01.dbf 
  224. channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 
  225.  
  226. starting media recovery 
  227.  
  228. media recovery complete, elapsed time: 00:00:00 
  229. Finished recover at 19-APR-21 
  230. Executing: alter system set standby_file_management=auto 
  231. Finished recover at 19-APR-21 

方便大家查看,于是记录恢复全过程,通过以上执行过程,可以看到:

  • RECOVER STANDBY DATABASE命令重新启动备用实例。
  • 从主数据库刷新控制文件,并自动重命名数据文件,临时文件和联机日志。
  • 它可以还原添加到主数据库中的新数据文件,并还原到当前时间的备用数据库。

b.备库修改standby log路径发现刷新过后,备库redo log路径已修改,standby log路径未修改,因此手动修改。

查询备库的日志文件路径:

  1. sqlplus / as sysdba 
  2. SQL> select member from v$logfile; 
  3.  
  4. MEMBER 
  5. -------------------------------------------------------------------------------- 
  6. /oradata/ORCL_STBY/redo03.log 
  7. /oradata/ORCL_STBY/redo02.log 
  8. /oradata/ORCL_STBY/redo01.log 
  9. /oradata/ORCL/standby_redo04.log 
  10. /oradata/ORCL/standby_redo05.log 
  11. /oradata/ORCL/standby_redo06.log 
  12. /oradata/ORCL/standby_redo07.log 

关闭备库文件自动管理:

  1. sqlplus / as sysdba 
  2. alter system set standby_file_management=MANUAL; 

清理standby log:

  1. sqlplus / as sysdba 
  2. alter database clear logfile group 4; 
  3. alter database clear logfile group 5; 
  4. alter database clear logfile group 6; 
  5. alter database clear logfile group 7; 

修改standby log路径:

  1. sqlplus / as sysdba 
  2. alter database rename file '/oradata/ORCL/standby_redo04.log' to '/oradata/ORCL_STBY/standby_redo04.log'
  3. alter database rename file '/oradata/ORCL/standby_redo05.log' to '/oradata/ORCL_STBY/standby_redo05.log'
  4. alter database rename file '/oradata/ORCL/standby_redo06.log' to '/oradata/ORCL_STBY/standby_redo06.log'
  5. alter database rename file '/oradata/ORCL/standby_redo07.log' to '/oradata/ORCL_STBY/standby_redo07.log'

修改完后打开备库文件自动管理:

  1. sqlplus / as sysdba 
  2. alter system set standby_file_management=AUTO; 

c.主库切日志,备库开启日志应用检查主备scn是否一致:

  1. sqlplus / as sysdba 
  2. col HXFNM for a100 
  3. set line222 
  4. select HXFIL File_num,substr(HXFNM,1,40) HXFNM,fhscn from x$kcvfh; 

主库切几次归档:

  1. sqlplus / as sysdba 
  2. ALTER SYSTEM ARCHIVE LOG CURRENT
  3. ALTER SYSTEM SWITCH LOGFILE; 

开启备库应用日志:

  1. sqlplus / as sysdba 
  2. alter database open
  3. alter pluggable database all open
  4. ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION; 

查看备库同步是否正常:

  1. sqlplus / as sysdba 
  2. set line222 
  3. col member for a60 
  4. select t1.group#,t1.thread#,t1.bytes/1024/1024,t1.status,t2.member from gv$standby_log t1,gv$logfile t2 where t1.group#=t2.group#; 

主库插入数据:

  1. sqlplus test/test@pdb01 
  2. insert into test values (999); 
  3. commit

备库查询是否实时同步:

  1. sqlplus / as sysdba 
  2. alter session set container=pdb01; 
  3. select * from test.test; 
  4. ID 
  5. ---------- 
  6. 999 

至此,18C的GAP也已修复,可以看到Oracle随着版本升级,越来越自动化的操作,意味着运维自动化的未来。

参考文档:

RESTORE/Recover from Service

Restoring and Recovering Files Over the Network(DG)

Restoring and Recovering Files Over the Network(RMAN)

Rolling Forward a Standby With One Command 18C

 

责任编辑:姜华 来源: Lucifer三思而后行
相关推荐

2015-03-09 14:53:04

OracleOracle DGDataGuard F

2009-07-03 09:44:30

Oracle Data

2011-07-05 16:18:14

DataGuardSTANDBY

2021-11-08 08:29:57

Oracle数据库后端开发

2021-12-07 08:30:38

Oracle数据库后端开发

2011-05-25 09:20:24

Oracle数据库

2010-03-30 19:31:25

Oracle 10g

2009-11-04 17:52:35

Oracle用户管理

2017-07-19 09:53:42

Oracle分区问题

2021-03-18 09:11:26

OracleJDK 16数据库

2021-12-06 08:31:18

Oracle数据库后端开发

2011-06-07 10:13:58

2021-05-19 20:20:56

Oracle归档修复

2017-07-04 15:45:30

数据库RACWindows平台

2016-08-01 11:07:51

Oracle漏洞

2013-02-21 10:05:05

2009-10-26 17:29:21

Oracle管理员数据库管理

2021-12-13 17:23:23

戴尔

2021-08-29 23:53:32

存储Air Gap安装

2019-08-19 14:51:56

Linux 系统 数据
点赞
收藏

51CTO技术栈公众号