12c rman从备份集中active duplicate

12c以前的版本中,ACTIVE DUPLICATE进程使用生产库的进程通过网络将镜像副本发送到辅助库,这会是一个很消耗时间的任务,因为复制进程是直接按照源库大小相同比例进行复制。而在现在的12c中,数据库复制进程可以使用备份集来代替镜像副本。那么需要传输的数据库大小就会大幅度减小,因为RMAN备份的时候会跳过没有使用的块和已经提交了的回滚块等。同时也可以使用压缩或者切片的方式来提高复制传输的速度。另外新的从辅助库发起的辅助通道会用来从源库进行拉取备份集,而不是以前的从源库将备份集推送到辅助库,从而降低了源库的负载压力。

12c中,一个pull进程由备份集来决定,连接最初从源库建立,辅助实例则会通过网络接收到所需的数据库文件。恢复进程则是在辅助实例上发起,因此对源库的资源消耗更少了。

基于DUPLICATE语句,RMAN动态决定使用哪种进程,pull或者push。这样保证了现有已存在的脚本仍然有效。

  • 当你指定USING BACKUPSET,RMAN使用pull方法
  • 当你在DUPLICATE之前指定SET ENCRYPTION,RMAN自动使用pull方法并且创建备份集。这些要传输到目标端的备份集是被加密的
  • SECTION SIZE语句将数据文件切分多个小块,这样在辅助实例上并行恢复的时候可以利用多个通道的优势。为了更有效的使用并发,可以配置多个辅助通道
  • 通过USING COMPRESSED BACKUPSET语句,文件会通过压缩备份集的格式进行传输。RMAN创建备份时采取对未使用的块压缩方式,因此缩小了需要通过网络传输的备份集大小

示例

1
2
3
4
5
6
7
sys@ORA12C> select con_id,name,open_mode from v$pdbs;

CON_ID NAME OPEN_MODE
---------- ---------- ----------
2 PDB$SEED READ ONLY
3 PDB12C READ WRITE
4 PDB3 READ WRITE

登录两边实例

1
2
3
4
5
6
7
8
[oracle@testyum ~]$ rman target sys/oracle@ora12c auxiliary sys/oracle@ora12c_dg

Recovery Manager: Release 12.2.0.1.0 - Production on Tue Aug 27 13:18:24 2019

Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.

connected to target database: ORA12C (DBID=383814323)
connected to auxiliary database: ORA12C (not mounted)

开始执行复制脚本

1
2
3
4
5
6
7
8
9
10
11
run {
allocate channel prmy1 type disk;
allocate channel prmy2 type disk;
allocate auxiliary channel aux1 type disk;
allocate auxiliary channel aux2 type disk;
allocate auxiliary channel aux3 type disk;
allocate auxiliary channel aux4 type disk;
DUPLICATE TARGET DATABASE TO 'ora12c'
FROM ACTIVE DATABASE
USING BACKUPSET;
}

完整日志:rman_duplicate_backupset.log

通过日志可以看出一些端倪

1
2
3
4
5
6
7
8
9
10
11
12
13
contents of Memory Script:
{
sql clone "alter system set control_files =
''/u01/app/oracle/oradata/ORA12C/controlfile/o1_mf_gcm27myg_.ctl'', ''/u01/app/oracle/fast_recovery_area/ora12c/ORA12C/controlfile/o1_mf_gcm27ndj_.ctl'' comment=
''Set by RMAN'' scope=spfile";
sql clone "alter system set db_name =
''ORA12C'' comment=
''Modified by RMAN duplicate'' scope=spfile";
shutdown clone immediate;
startup clone force nomount
restore clone from service 'ora12c' primary controlfile;
alter clone database mount;
}

这里辅助库是直接通过restore from service 的方式恢复了主库的控制文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
contents of Memory Script:
{
sql clone 'alter database flashback off';
set newname for clone datafile 1 to new;
set newname for clone datafile 3 to new;
set newname for clone datafile 4 to new;
set newname for clone datafile 5 to new;
set newname for clone datafile 6 to new;
set newname for clone datafile 7 to new;
set newname for clone datafile 8 to new;
set newname for clone datafile 9 to new;
set newname for clone datafile 10 to new;
set newname for clone datafile 11 to new;
set newname for clone datafile 12 to new;
set newname for clone datafile 134 to new;
set newname for clone datafile 135 to new;
set newname for clone datafile 136 to new;
set newname for clone datafile 137 to new;
restore
from nonsparse from service
'ora12c' clone database
;
sql 'alter system archive log current';
}

这里是通restore from service 恢复了数据文件。

看到这里很容易就联想到之前说过的12c新特性12c新特性:Rman中通过网络恢复文件

所以从备份集中的在线复制其实就是采用了新特性,然后从辅助库发起连接,使用RESTORE FROM SERVICE的方式将数据文件恢复到本地。


12c rman从备份集中active duplicate
https://www.xbdba.com/2019/08/27/12c-rman-active-duplicate-from-backupset/
作者
xbdba
发布于
2019年8月27日
许可协议