暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle DG环境中的gap处理办法总结

DB宝 2023-02-23
1655

概述

当主库的某些日志没有成功传送到备库,那么这时候就发生了归档裂缝(Archive Gap)。目前Oracle提供了两种日志GAP的检测和处理机制,分别是自动GAP处理(Automatic Gap Resolution)和FAL进程GAP处理(FAL Gap Resolution)。自动GAP处理即主库上的ARCn进程会每分钟检查备库上的日志GAP情况并做相应处理。FAL(Fetch Archive Log)是通过配置FAL_SERVER和FAL_CLIENT实现GAP检测的一种机制,它是备库主动发起的“取”日志的过程。备库就是FAL_CLIENT,它从FAL_SERVER中取这些GAP。Oracle会首先尝试使用FAL进程处理GAP,当发现FAL机制并没有配置生效的时候,进而尝试使用自动GAP处理。FAL进程只在物理备库存在。FAL进程提供了一个CLIENT/SERVER的机制,用来解决检测在主库产生的连续的归档日志,而在备库接受的归档日志不连续的问题。该进程只有在需要的时候才会启动,而当工作完成后就关闭了,因此在正常情况下,该进程是无法看见的。

大致可以分为以下几种情况来处理:

1、主库归档日志存在,可以通过配置Fetch Archive Log(FAL)参数,自动解决归档GAP,或将归档日志拷贝到从库手工注册处理。

2、主库归档日志丢失,需要人工干预来修复,可以分为如下几种情况:

①  12c版本之前的常规处理步骤:

1.在主库上创建一个备库的控制文件
2.以备库的当前SCN号为起点,在主库上做一个增量备份
3.将增量备份拷贝到备库上
4.使用新的控制文件将备库启动到mount状态
5.将增量备份注册到RMAN的catalog,取消备库的恢复应用,恢复增量备份
6.开启备库的恢复进程

②  从12c开始RECOVER … FROM SERVICE

③ 从18c开始RECOVER STANDBY DATABASE FROM SERVICE

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

处理GAP方法1:手动拷贝归档到备库进行手工注册处理,归档未丢失

(一)物理DG手动解决GAP

在一些特殊情况下,如果GAP不能自动解决,那么就需要手工执行中断恢复。通过查询视图V$ARCHIVE_GAP
可以确定断档的是哪些日志。

1SQL> SELECT * FROM V$ARCHIVE_GAP;
2THREAD#    LOW_SEQUENCE#  HIGH_SEQUENCE#
3----------- ------------- --------------
41                     10              12

可以看到,当前物理备库丢失日志文件从线程1的序号10到序号12。接下来确定归档日志文件的路径:(假设在主数据库上的本地归档目的地是LOG_ARCHIVE_DEST_1):

1SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN 10 AND 12;
2NAME
3-----------------------------------------------------------------  
4/arch/thread1_dest/arch_1_10.arc
5/arch/thread1_dest/arch_1_11.arc
6/arch/thread1_dest/arch_1_12.arc

接下来,复制这些日志文件到物理备库,然后在物理备库上使用“ALTER DATABASE REGISTER LOGFILE”语句来注册这些归档日志,如下所示:

1SQL> ALTER DATABASE REGISTER LOGFILE  '/arch/thread1_dest/arch_1_10.arc';
2
3-- 也可以使用如下的SQL语句:
4ALTER DATABASE REGISTER OR REPLACE  LOGFILE '/arch/thread1_dest/arch_1_10.arc';
5ALTER DATABASE REGISTER OR REPLACE  PHYSICAL LOGFILE '/arch/thread1_dest/arch_1_11.arc';

在物理备库上注册这些日志文件之后,重新打开重做应用进程。如果断档的归档日志较多,那么可以使用如下的SQL语句来生成要执行的SQL语句(如下的SQL也适用于逻辑DG):

1SELECT 'ALTER DATABASE REGISTER OR REPLACE LOGICAL LOGFILE ''/arch/thread1_dest/arch_1_' || a ||'.arc'';' LOGICAL_DG,
2        'ALTER DATABASE REGISTER OR REPLACE  LOGFILE ''/arch/thread1_dest/arch_1_' || a ||'.arc'';' PHYSICAL_DG
3  FROM (SELECT LEVEL A FROM DUAL CONNECT BY LEVEL <= 12)
4 WHERE A >= 10 ;

需要注意的是,视图VARCHIVE_GAP视图来确定下一个中断序号,如果有的话,重复这个过程直到没有更多的中断。

(二)逻辑DG手动解决GAP

在逻辑备库上查询DBA_LOGSTDBY_LOG视图可以确定是否有归档中断。例如,下面的查询指出断档号为16至18:

1SYS@orclasm > COLUMN FILE_NAME FORMAT a60
2SYS@orclasm > SELECT THREAD#, SEQUENCE#, FILE_NAME
3  2    FROM DBA_LOGSTDBY_LOG L
4  3   WHERE NEXT_CHANGE# NOT IN (SELECT FIRST_CHANGE# FROM DBA_LOGSTDBY_LOG WHERE L.THREAD# = THREAD#)
5  4   ORDER BY THREAD#, SEQUENCE#;
6THREAD#    SEQUENCE# FILE_NAME  
7--------- ---------- ---------------------------------------------  
81                 16 /arch/oracle/arch_1_16.arc
91                 18 /arch/oracle/arch_1_18.arc

接下来复制丢失的日志文件到逻辑备库,并在逻辑备库上使用“ALTER DATABASE REGISTER LOGICAL LOGFILE”来注册这些日志文件。例如:

1SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE  '/arch/oracle/arch_1_16.arc';

在逻辑备库上注册这些日志文件之后,重启SQL应用。和物理DG一样,在逻辑备库上的DBA_LOGSTDBY_LOG视图只返回当前妨碍SQL应用继续的下一个中断。在解决指定的中断并重启SQL应用之后,再次在逻辑备库上查询DBA_LOGSTDBY_LOG视图,以确定下一个中断序号,如果有的话,重复这个过程直到没有更多的中断。

需要注意的是,如果需要的归档日志已经不在主库上了,但是有归档日志的RMAN备份,那么可以通过RMAN恢复把缺少的归档日志进行还原,如下所示:

1SET ARCHIVELOG DESTINATION TO '/arch';
2RESTORE ARCHIVELOG  FROM LOGSEQ 7;

处理GAP方法2:主库基于SCN的增量备份来恢复DG(常规办法)

如果断档的归档日志已经丢失,且RMAN又没有备份,那么在Oracle 10g之前没有办法修复了,只能重建DG,但是从Oracle 10g开始可以采用主库基于SCN的增量备份来恢复DG,请参考:

https://www.xmmup.com/zaidghuanjingzhongzhukudiushiguidangduizhukujinxingjiyuscndezengliangbeifenlaihuifuwulidghuanjing.html

https://www.xmmup.com/dghuanjingzhukudiushiguidangqingkuangxiashujuwenjiandehuifu.html

https://www.xmmup.com/rachuanjingxiazhukudiushiguidangbeikudgdehuifuguocheng.html

https://www.xmmup.com/wulidgzaizhukudiushiguidangwenjiandeqingkuangxiadehuifu.html

从12c开始:RECOVER … FROM SERVICE

参考:https://www.xmmup.com/zaioracle-12czhongzairmanfangmianyounaxiezengqiangdexintexing.html#wu_tong_guo_wang_luo_yuan_cheng_hui_fu_shu_ju_ku_RestoreRecover_from_Service

从18c开始:RECOVER STANDBY DATABASE FROM SERVICE

Oracle在18c对(RESTORE/RECOVER …FROM SERVICE)功能进行了加强,推出了(RECOVER STANDBY DATABASE … FROM SERVICE)通过网络服务直接增量恢复备库数据,这个新特性也大大简化了DataGuard主备的问题修复。

示例

下面我们通过实验来进行展示:

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

 1##备库:
2ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
3shutdown immediate
4
5##主库:
6alter system switch logfile;多次切归档
7
8##删除最近几个归档日志:
9rm 1_34_1070147137.arc 
10rm 1_33_1070147137.arc
11
12##备库:
13startup
14ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
15
16##查看GAP
17SQL> SELECT * FROM V$ARCHIVE_GAP;
18
19   THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
20---------- ------------- --------------
21         1            32             34
22
23SQL> SELECT max(sequence#) from v$archived_log where applied='YES';
24
25MAX(SEQUENCE#)
26--------------
27            31
28
29SQL> SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;
30
31PROCESS   STATUS          THREAD#  SEQUENCE#     BLOCK#     BLOCKS
32--------- ------------ ---------- ---------- ---------- ----------
33ARCH      CLOSING               1         38          1         40
34ARCH      CLOSING               1         39          1          2
35ARCH      CONNECTED             0          0          0          0
36ARCH      CLOSING               1         37          1          2
37RFS       IDLE                  0          0          0          0
38RFS       IDLE                  0          0          0          0
39RFS       IDLE                  1         40         83          1
40MRP0      APPLYING_LOG          1         33          1     245760
41
428 rows selected.

12之前

当前GAP:32---34

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

1SQL> alter database create standby controlfile as '/tmp/standby.ctl';
2
3Database altered.

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

 1-- 备库
2SQL> select  to_char(current_scn) from v$database;
3
4TO_CHAR(CURRENT_SCN)
5----------------------------------------
61086639
7
8-- 主库
9rman target /
10run{
11allocate channel c1 type disk;
12allocate channel c2 type disk;
13backup INCREMENTAL from scn 1086639 database format '/tmp/incre_%U';
14release channel c1;
15release channel c2;
16}

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

 1-- 主库
2[oracle@orcl:/tmp]$ scp incre_0* oracle@ORCL_SBDB:/home/oracle
3oracle@ORCL_SBDB's password: 
4incre_0cvsjs8b_1_1                                                                                                                                                         100%  144KB 144.0KB/s   00:00    
5incre_0dvsjs9a_1_1                                                                                                                                                         100%  416KB 416.0KB/s   00:00    
6incre_0evsjs9a_1_1                                                                                                                                                         100%  144KB 144.0KB/s   00:00    
7incre_0fvsjs9b_1_1                                                                                                                                                         100% 9856KB   9.6MB/s   00:00    
8[oracle@orcl:/tmp]$ scp standby.ctl oracle@ORCL_SBDB:/home/oracle        
9oracle@ORCL_SBDB'
s password: 
10standby.ctl

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

 1shutdown immediate
2startup nomount
3
4rman target /
5RMAN> restore controlfile from '/home/oracle/standby.ctl';
6
7Starting restore at 18-APR-21
8using target database control file instead of recovery catalog
9allocated channel: ORA_DISK_1
10channel ORA_DISK_1: SID=19 device type=DISK
11
12channel ORA_DISK_1: copied control file copy
13output file name=/oradata/orcl/control01.ctl
14output file name=/u01/app/oracle/fast_recovery_area/orcl/control02.ctl
15Finished restore at 18-APR-21
16
17alter database mount;

5.增量备份注册到RMAN的catalog,取消日志应用,恢复增量备份

 1-- 备库
2ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
3
4rman target /
5RMAN> catalog start with '/home/oracle/';
6YES
7
8RMAN> recover database noredo;
9
10Starting recover at 18-APR-21
11allocated channel: ORA_DISK_1
12channel ORA_DISK_1: SID=29 device type=DISK
13channel ORA_DISK_1: starting incremental datafile backup set restore
14channel ORA_DISK_1: specifying datafile(s) to restore from backup set
15destination for restore of datafile 00001: /oradata/orcl/system01.dbf
16destination for restore of datafile 00004: /oradata/orcl/users01.dbf
17destination for restore of datafile 00006: /oradata/orcl/test09.dbf
18channel ORA_DISK_1: reading from backup piece /home/oracle/incre_0evsjs9a_1_1
19channel ORA_DISK_1: piece handle=/home/oracle/incre_0evsjs9a_1_1 tag=TAG20220418T133122
20channel ORA_DISK_1: restored backup piece 1
21channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
22channel ORA_DISK_1: starting incremental datafile backup set restore
23channel ORA_DISK_1: specifying datafile(s) to restore from backup set
24destination for restore of datafile 00002: /oradata/orcl/sysaux01.dbf
25destination for restore of datafile 00003: /oradata/orcl/undotbs01.dbf
26destination for restore of datafile 00005: /oradata/orcl/example01.dbf
27channel ORA_DISK_1: reading from backup piece /home/oracle/incre_0dvsjs9a_1_1
28channel ORA_DISK_1: piece handle=/home/oracle/incre_0dvsjs9a_1_1 tag=TAG20220418T133122
29channel ORA_DISK_1: restored backup piece 1
30channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
31
32Finished recover at 18-APR-21

6.开启备库的恢复进程

 1alter database open read only;
2ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
3
4--GAP已修复
5SQL> SELECT * FROM V$ARCHIVE_GAP;
6
7no rows selected
8
9SQL> SELECT max(sequence#) from v$archived_log where applied='YES';
10
11MAX(SEQUENCE#)
12--------------
13            41
14
15SQLSELECT PROCESS, STATUSTHREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;
16
17PROCESS   STATUS          THREAD#  SEQUENCE#     BLOCK#     BLOCKS
18--------- ------------ ---------- ---------- ---------- ----------
19ARCH      CONNECTED             0          0          0          0
20ARCH      CONNECTED             0          0          0          0
21ARCH      CONNECTED             0          0          0          0
22ARCH      CLOSING               1         41          1        257
23RFS       IDLE                  0          0          0          0
24RFS       IDLE                  0          0          0          0
25RFS       IDLE                  1         42      19969          1
26MRP0      APPLYING_LOG          1         42      19969     245760
27
288 rows selected.

12c开始

 1SQL> SELECT * FROM V$ARCHIVE_GAP;
2
3   THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#     CON_ID
4---------- ------------- -------------- ----------
5     1        30         31      1
6
7SQL> SELECT max(sequence#) from v$archived_log where applied='YES';
8
9MAX(SEQUENCE#)
10--------------
11        29
12
13SQLSELECT PROCESS, STATUSTHREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;
14
15PROCESS   STATUS      THREAD#  SEQUENCE#     BLOCK#     BLOCKS
16--------- ------------ ---------- ---------- ---------- ----------
17ARCH      CONNECTED     0      0          0      0
18DGRD      ALLOCATED     0      0          0      0
19DGRD      ALLOCATED     0      0          0      0
20ARCH      CONNECTED     0      0          0      0
21ARCH      CLOSING       1     29          1      268
22ARCH      CONNECTED     0      0          0      0
23RFS          IDLE          1     34        184      1
24RFS          IDLE          1      0          0      0
25RFS          IDLE          0      0          0      0
26RFS          IDLE          0      0          0      0
27RFS          IDLE          0      0          0      0
28MRP0      WAIT_FOR_GAP  1     30          0      0
29DGRD      ALLOCATED     0      0          0      0
30
3113 rows selected.
32
33[oracle@ORCL_SBDB:/archivelog]$ ll
34total 11508
35-rw-r-----. 1 oracle oinstall 11634176 Apr 19 02:05 1_28_1069567741.arc
36-rw-r-----. 1 oracle oinstall   137728 Apr 19 02:08 1_29_1069567741.arc
37-rw-r-----. 1 oracle oinstall     1536 Apr 19 02:08 1_32_1069567741.arc
38-rw-r-----. 1 oracle oinstall     3584 Apr 19 02:08 1_33_1069567741.arc

当前GAP:30---31,缺少归档30,31

1.记录主库和备库当前SCN号

 1-- 主库
2SQL> set line222
3SQLcol HXFNM for a100
4SQLselect HXFIL File_num,substr(HXFNM,1,40) HXFNM,fhscn from x$kcvfh;
5
6  FILE_NUM HXFNM                                                FHSCN
7---------- ---------------------------------------------------------------------------------------------------- --------------------
8     1 /oradata/ORCL/system01.dbf                                       2600522
9     3 /oradata/ORCL/sysaux01.dbf                                       2600522
10     4 /oradata/ORCL/undotbs01.dbf                                      2600522
11     5 /oradata/ORCL/pdbseed/system01.dbf                               2155383
12     6 /oradata/ORCL/pdbseed/sysaux01.dbf                               2155383
13     7 /oradata/ORCL/users01.dbf                                        2600522
14     8 /oradata/ORCL/pdbseed/undotbs01.dbf                              2155383
15     9 /oradata/ORCL/BFA6BEE45A1E3605E053AC01A8                         2600522
16    10 /oradata/ORCL/BFA6BEE45A1E3605E053AC01A8                         2600522
17    11 /oradata/ORCL/BFA6BEE45A1E3605E053AC01A8                         2600522
18    12 /oradata/ORCL/test09.dbf                                         2600522
19
20
21
22
23-- 备库
24SQL> set line222
25SQLcol HXFNM for a100
26SQLselect HXFIL File_num,substr(HXFNM,1,40) HXFNM,fhscn from x$kcvfh;
27
28  FILE_NUM HXFNM                                                FHSCN
29---------- ---------------------------------------------------------------------------------------------------- --------------------
30     1 /oradata/ORCL_SBDB/system01.dbf                                  2600488
31     3 /oradata/ORCL_SBDB/sysaux01.dbf                                  2600488
32     4 /oradata/ORCL_SBDB/undotbs01.dbf                                 2600488
33     5 /oradata/ORCL_SBDB/pdbseed/system01.dbf                          2155383
34     6 /oradata/ORCL_SBDB/pdbseed/sysaux01.dbf                          2155383
35     7 /oradata/ORCL_SBDB/users01.dbf                                   2600488
36     8 /oradata/ORCL_SBDB/pdbseed/undotbs01.dbf                         2155383
37     9 /oradata/ORCL_SBDB/PDB01/o1_mf_system_j7                         2600488
38    10 /oradata/ORCL_SBDB/PDB01/o1_mf_sysaux_j7                         2600488
39    11 /oradata/ORCL_SBDB/PDB01/o1_mf_undotbs1_                         2600488
40    12 /oradata/ORCL_SBDB/test09.dbf                                    2600488
41
42
43SQL> SELECT CURRENT_SCN FROM V$DATABASE;
44
45CURRENT_SCN
46-----------
47    2600487

2.使用recover standby using service恢复

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

语法:

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

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

  1-- 主库添加数据文件
2SQL> alter tablespace TEST add datafile '/oradata/ORCL/test10.dbf' size 100M autoextend off;
3
4Tablespace altered.
5
6--检查备库scn是否添加数据文件
7SQL> select file# from v$datafile where creation_change# > =2600487;
8
9     FILE#
10----------
11    13
12
13-- 备库启动到nomount状态
14shutdown immediate
15startup nomount
16
17--rman恢复
18rman target /
19
20##恢复控制文件
21RMAN> restore standby controlfile from service orcl;
22
23Starting restore at 19-APR-22
24using target database control file instead of recovery catalog
25allocated channel: ORA_DISK_1
26channel ORA_DISK_1: SID=739 device type=DISK
27
28channel ORA_DISK_1: starting datafile backup set restore
29channel ORA_DISK_1: using network backup set from service orcl
30channel ORA_DISK_1: restoring control file
31channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
32output file name=/oradata/ORCL_SBDB/control01.ctl
33output file name=/oradata/ORCL_SBDB/control02.ctl
34Finished restore at 19-APR-22
35
36##mount数据库
37alter database mount;
38
39##restore新添加的数据文件
40run
41{
42SET NEWNAME FOR DATABASE TO '/oradata/ORCL_SBDB/%f_%U';
43RESTORE DATAFILE 13 FROM SERVICE orcl;
44}
45
46executing command: SET NEWNAME
47
48Starting restore at 19-APR-22
49allocated channel: ORA_DISK_1
50channel ORA_DISK_1: SID=503 device type=DISK
51
52channel ORA_DISK_1: starting datafile backup set restore
53channel ORA_DISK_1: using network backup set from service orcl
54channel ORA_DISK_1: specifying datafile(s) to restore from backup set
55channel ORA_DISK_1: restoring datafile 00013 to /oradata/ORCL_SBDB/13_data_D-ORCL_TS-TEST_FNO-13
56channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
57Finished restore at 19-APR-22
58
59##由于主备的数据文件目录不一致,需要修改controlfile中数据文件位置
60catalog start with '/oradata/ORCL_SBDB';
61YES
62SWITCH DATABASE TO COPY;
63
64##rename tempfile && logfile
65alter system set standby_file_management=MANUAL;
66##logfile
67alter database clear logfile group 1;
68alter database clear logfile group 2;
69alter database clear logfile group 3;
70alter database clear logfile group 4;
71alter database clear logfile group 5;
72alter database clear logfile group 6;
73alter database clear logfile group 7;
74alter database rename file '/oradata/ORCL/redo03.log' to '/oradata/ORCL_SBDB/redo03.log';
75alter database rename file '/oradata/ORCL/redo02.log' to '/oradata/ORCL_SBDB/redo02.log';
76alter database rename file '/oradata/ORCL/redo01.log' to '/oradata/ORCL_SBDB/redo01.log';
77alter database rename file '/oradata/ORCL/standby_redo04.log' to '/oradata/ORCL_SBDB/standby_redo04.log';
78alter database rename file '/oradata/ORCL/standby_redo05.log' to '/oradata/ORCL_SBDB/standby_redo05.log';
79alter database rename file '/oradata/ORCL/standby_redo06.log' to '/oradata/ORCL_SBDB/standby_redo06.log';
80alter database rename file '/oradata/ORCL/standby_redo07.log' to '/oradata/ORCL_SBDB/standby_redo07.log';
81##tempfile
82alter database rename file '/oradata/ORCL/temp01.dbf' to '/oradata/ORCL_SBDB/temp01.dbf';
83alter database rename file '/oradata/ORCL/pdbseed/temp012022-04-11_06-13-50-844-AM.dbf' to '/oradata/ORCL_SBDB/pdbseed/temp012022-04-11_06-13-50-844-AM.dbf';
84alter database rename file '/oradata/ORCL/BFA6BEE45A1E3605E053AC01A8C0DD20/datafile/o1_mf_temp_j749f5fy_.dbf' to '/oradata/ORCL_SBDB/BFA6BEE45A1E3605E053AC01A8C0DD20/datafile/o1_mf_temp_j749f5fy_.dbf';
85
86alter system set standby_file_management=AUTO;
87
88##恢复数据库
89RMAN> recover database from service orcl noredo using compressed backupset;
90
91Starting recover at 19-APR-22
92allocated channel: ORA_DISK_1
93channel ORA_DISK_1: SID=2 device type=DISK
94skipping datafile 5; already restored to SCN 2155383
95skipping datafile 6; already restored to SCN 2155383
96skipping datafile 8; already restored to SCN 2155383
97channel ORA_DISK_1: starting incremental datafile backup set restore
98channel ORA_DISK_1: using compressed network backup set from service orcl
99destination for restore of datafile 00001: /oradata/ORCL_SBDB/system01.dbf
100channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
101channel ORA_DISK_1: starting incremental datafile backup set restore
102channel ORA_DISK_1: using compressed network backup set from service orcl
103destination for restore of datafile 00003: /oradata/ORCL_SBDB/sysaux01.dbf
104channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
105channel ORA_DISK_1: starting incremental datafile backup set restore
106channel ORA_DISK_1: using compressed network backup set from service orcl
107destination for restore of datafile 00004: /oradata/ORCL_SBDB/undotbs01.dbf
108channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
109channel ORA_DISK_1: starting incremental datafile backup set restore
110channel ORA_DISK_1: using compressed network backup set from service orcl
111destination for restore of datafile 00007: /oradata/ORCL_SBDB/users01.dbf
112channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
113channel ORA_DISK_1: starting incremental datafile backup set restore
114channel ORA_DISK_1: using compressed network backup set from service orcl
115destination for restore of datafile 00009: /oradata/ORCL_SBDB/PDB01/o1_mf_system_j749f5d5_.dbf
116channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
117channel ORA_DISK_1: starting incremental datafile backup set restore
118channel ORA_DISK_1: using compressed network backup set from service orcl
119destination for restore of datafile 00010: /oradata/ORCL_SBDB/PDB01/o1_mf_sysaux_j749f5fw_.dbf
120channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
121channel ORA_DISK_1: starting incremental datafile backup set restore
122channel ORA_DISK_1: using compressed network backup set from service orcl
123destination for restore of datafile 00011: /oradata/ORCL_SBDB/PDB01/o1_mf_undotbs1_j749f5fx_.dbf
124channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
125channel ORA_DISK_1: starting incremental datafile backup set restore
126channel ORA_DISK_1: using compressed network backup set from service orcl
127destination for restore of datafile 00012: /oradata/ORCL_SBDB/test09.dbf
128channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
129
130Finished recover at 19-APR-22

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

 1RMAN> recover database from service orcl noredo using compressed backupset;
2
3Starting recover at 19-APR-22
4using channel ORA_DISK_1
5channel ORA_DISK_1: starting incremental datafile backup set restore
6channel ORA_DISK_1: using compressed network backup set from service orcl
7RMAN-00571: ===========================================================
8RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
9RMAN-00571: ===========================================================
10RMAN-03002: failure of recover command at 04/19/2022 02:25:29
11ORA-19625: error identifying file /oradata/ORCL/system01.dbf
12ORA-27037: unable to obtain file status
13Linux-x86_64 Error: 2: No such file or directory
14Additional information: 7

3.开启备库日志应用

 1--此时主备库的sch已恢复一致
2SQL> col HXFNM for a100
3SQL> set line222
4SQLselect HXFIL File_num,substr(HXFNM,1,40) HXFNM,fhscn from x$kcvfh;
5
6  FILE_NUM HXFNM                                                FHSCN
7---------- ---------------------------------------------------------------------------------------------------- --------------------
8     1 /oradata/ORCL_SBDB/system01.dbf                                  2603512
9     3 /oradata/ORCL_SBDB/sysaux01.dbf                                  2603514
10     4 /oradata/ORCL_SBDB/undotbs01.dbf                                 2603516
11     5 /oradata/ORCL_SBDB/pdbseed/system01.dbf                          2155383
12     6 /oradata/ORCL_SBDB/pdbseed/sysaux01.dbf                          2155383
13     7 /oradata/ORCL_SBDB/users01.dbf                                   2603518
14     8 /oradata/ORCL_SBDB/pdbseed/undotbs01.dbf                         2155383
15     9 /oradata/ORCL_SBDB/PDB01/o1_mf_system_j7                         2603521
16    10 /oradata/ORCL_SBDB/PDB01/o1_mf_sysaux_j7                         2603524
17    11 /oradata/ORCL_SBDB/PDB01/o1_mf_undotbs1_                         2603527
18    12 /oradata/ORCL_SBDB/test09.dbf                                    2603530
19
2011 rows selected.
21
22-- 主库需要切几次归档
23ALTER SYSTEM ARCHIVE LOG CURRENT;
24
25或者
26
27ALTER SYSTEM SWITCH LOGFILE;
28
29--开启备库应用日志
30alter database open;
31alter pluggable database all open;
32ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

4、测试同步情况

 1--查看standby日志是否正常
2set line 222
3col member for a60
4select 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#;
5
6
7    GROUP#    THREAD# T1.BYTES/1024/1024 STATUS     MEMBER
8---------- ---------- ------------------ ---------- ------------------------------------------------------------
9     4      1            120 ACTIVE     /oradata/ORCL/standby_redo04.log
10     5      1            120 UNASSIGNED /oradata/ORCL/standby_redo05.log
11     6      1            120 UNASSIGNED /oradata/ORCL/standby_redo06.log
12     7      1            120 UNASSIGNED /oradata/ORCL/standby_redo07.log
13
14-- 主库插入数据
15sqlplus test/test@pdb01
16insert into test values (999);
17commit;
18
19-- 备库查询
20SQL> alter session set container=pdb01;
21SQL> select * from test.test;
22
23    ID
24----------
25     1
26     2
27     999
28
29-- 备库已同步

18c开始

将RECOVER STANDBY DATABASE命令与FROM SERVICE子句一起使用,以通过对主数据库进行的更改来刷新物理备用数据库。

备库可以直接在开启状态进行刷新。

语法:

1RECOVER STANDBY DATABASE FROM SERVICE primary_db;

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

 1-- 备库存在GAP
2SQL> SELECT PROCESS, STATUSTHREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;
3
4PROCESS   STATUS      THREAD#  SEQUENCE#     BLOCK#     BLOCKS
5--------- ------------ ---------- ---------- ---------- ----------
6ARCH      CONNECTED     0      0          0      0
7DGRD      ALLOCATED     0      0          0      0
8DGRD      ALLOCATED     0      0          0      0
9ARCH      CONNECTED     0      0          0      0
10ARCH      CONNECTED     0      0          0      0
11ARCH      CONNECTED     0      0          0      0
12RFS          IDLE          1      0          0      0
13RFS          IDLE          1     72        119      1
14RFS          IDLE          0      0          0      0
15RFS          IDLE          0      0          0      0
16MRP0      WAIT_FOR_GAP  1     70          0      0
17
1811 rows selected.
19
20SQLSELECT max(sequence#) from v$archived_log where applied='YES';
21
22MAX(SEQUENCE#)
23--------------
24        69
25
26SQLselect * from v$archive_gap;
27
28   THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#     CON_ID
29---------- ------------- -------------- ----------
30     1        70         70      1
31
32-- 主库添加数据文件
33SQL> alter tablespace TEST add datafile '/oradata/ORCL/test10.dbf' size 100autoextend off;
34
35Tablespace altered.

1、执行RECOVER STANDBY DATABASE FROM SERVICE刷新备库:

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

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

2、rename standby log

 1--刷新过后,redo log路径已修改,standby log路径未修改。
2SQL> select member from v$logfile;
3
4MEMBER
5--------------------------------------------------------------------------------
6/oradata/ORCL_SBDB/redo03.log
7/oradata/ORCL_SBDB/redo02.log
8/oradata/ORCL_SBDB/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
13
14
15--rename tempfile && logfile
16alter system set standby_file_management=MANUAL;
17
18--clear log
19alter database clear logfile group 4;
20alter database clear logfile group 5;
21alter database clear logfile group 6;
22alter database clear logfile group 7;
23--standby log
24alter database rename file '/oradata/ORCL/standby_redo04.log' to '/oradata/ORCL_SBDB/standby_redo04.log';
25alter database rename file '/oradata/ORCL/standby_redo05.log' to '/oradata/ORCL_SBDB/standby_redo05.log';
26alter database rename file '/oradata/ORCL/standby_redo06.log' to '/oradata/ORCL_SBDB/standby_redo06.log';
27alter database rename file '/oradata/ORCL/standby_redo07.log' to '/oradata/ORCL_SBDB/standby_redo07.log';

3、主库切日志,备库开启日志应用

 1-- 主库需要切几次归档
2ALTER SYSTEM ARCHIVE LOG CURRENT;
3
4或者
5
6ALTER SYSTEM SWITCH LOGFILE;
7
8--开启备库应用日志
9alter database open;
10alter pluggable database all open;
11ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

4、测试同步情况

 1--查看standby日志是否正常
2set line222
3col member for a60
4select 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#;
5
6
7    GROUP#    THREAD# T1.BYTES/1024/1024 STATUS     MEMBER
8---------- ---------- ------------------ ---------- ------------------------------------------------------------
9     4      1            120 ACTIVE     /oradata/ORCL/standby_redo04.log
10     5      1            120 UNASSIGNED /oradata/ORCL/standby_redo05.log
11     6      1            120 UNASSIGNED /oradata/ORCL/standby_redo06.log
12     7      1            120 UNASSIGNED /oradata/ORCL/standby_redo07.log
13
14-- 主库插入数据
15sqlplus test/test@pdb01
16insert into test values (999);
17commit;
18
19-- 备库查询
20SQL> alter session set container=pdb01;
21
22Session altered.
23
24SQL> select * from test.test;
25
26    ID
27----------
28     1
29     2
30       999
31       999
32       233
33      7788
34
356 rows selected.
36
37-- 备库已同步

参考

Restoring and Recovering Files Over the Network(DG)

Restoring and Recovering Files Over the Network(RMAN)

Rolling Forward a Standby With One Command 18C


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

评论