在上一篇章中,我们用rman增量备份恢复了dataguard的gap,从12c中,我们更加方便了,可以用from service来恢复,同样,大致场景如下:
ASMCMD> rm thread_1_seq_78.381.1007741335
ASMCMD> rm thread_1_seq_79.383.1007741365
2019-05-08T16:43:41.635112+08:00
rfs (PID:32365): Selected LNO:11 for T-1.S-84 dbid 1530636559 branch 1002855823
2019-05-08T16:45:12.278880+08:00
PR00 (PID:29769): FAL: Failed to request gap sequence
PR00 (PID:29769): GAP - thread 1 sequence 78-79
PR00 (PID:29769): DBID 1530636559 branch 1002855823
PR00 (PID:29769): FAL: All defined FAL servers have been attempted
PR00 (PID:29769): -------------------------------------------------------------------------
PR00 (PID:29769): Check that the CONTROL_FILE_RECORD_KEEP_TIME initialization
PR00 (PID:29769): parameter is defined to a value that's sufficiently large
PR00 (PID:29769): enough to maintain adequate log switch information to resolve
PR00 (PID:29769): archived redo log gaps.
PR00 (PID:29769): -------------------------------------------------------------------------
恢复步骤:
1. 备库重起至mount状态
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
2. 关闭实时应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
3. 检查主库与备库datafile的scn
select HXFIL File_num,substr(HXFNM,1,40),fhscn from x$kcvfh;
4. 查询当前备库的scn
SELECT CURRENT_SCN FROM V$DATABASE;
这个在后面可以用来判断是否有新的文件加入到主库了
5. The RECOVER … FROM SERVICE command refreshes the standby data files and rolls them forward to the same point-in-time as the primary(引用原文).
[oracle@db5 ~]$ rman target /
恢复管理器: Release 18.0.0.0.0 - Production on 星期三 5月 8 17:39:41 2019
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved.
已连接到目标数据库: ORCL (DBID=1530636559, 未打开)
RMAN> recover database from service orcl noredo using compressed backupset;
从位于 08-5月 -2019 17:42:08 的 recover 开始
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=51 设备类型=DISK
正在跳过数据文件 1; 已还原到 SCN 8310616
正在跳过数据文件 2; 已还原到 SCN 8311214
正在跳过数据文件 3; 已还原到 SCN 8310784
正在跳过数据文件 4; 已还原到 SCN 8310796
正在跳过数据文件 5; 已还原到 SCN 8310801
在 08-5月 -2019 17:42:13 完成了 recover
RMAN> exit
可以再次对比主库与备库之前的datafile scn
select HXFIL File_num,substr(HXFNM,1,40),fhscn from x$kcvfh;
6. 重启备库至nomount状态
SHUTDOWN IMMEDIATE;
STARTUP NOMOUNT;
7. 从主库中恢复控制文件
[oracle@db5 ~]$ rman target /
恢复管理器: Release 18.0.0.0.0 - Production on 星期三 5月 8 18:30:14 2019
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved.
已连接到目标数据库: ORCL (未装载)
RMAN> restore standby controlfile from service orcl;
从位于 08-5月 -2019 18:30:17 的 restore 开始
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=39 设备类型=DISK
通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在使用来自服务 orcl 的网络备份集
通道 ORA_DISK_1: 正在还原控制文件
通道 ORA_DISK_1: 还原完成, 用时: 00:00:02
输出文件名=/u01/orcl/control01.ctl
输出文件名=/u01/orcl/control02.ctl
在 08-5月 -2019 18:30:23 完成了 restore
RMAN>
8. 备库开启同步
alter database mount;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE NODELAY PARALLEL 2 USING CURRENT LOGFILE DISCONNECT FROM SESSION
主库多切换两次日志:
alter system switch logfile;
9. 重启备库并开启同步
shutdown immediate;
startup
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE NODELAY PARALLEL 2 USING CURRENT LOGFILE DISCONNECT FROM SESSION;
10. 如果有新的数据文件后来加入到主库,需要重新同步到备库
SELECT file# FROM V$DATAFILE WHERE creation_change# >= 1984232;
RUN
{
SET NEWNAME FOR DATABASE TO '/u01/app/oracle/oradata/clone';
RESTORE DATAFILE 21 FROM SERVICE prim;
}
或者
RESTORE DATAFILE 21 FROM SERVICE prim;
同样,如有主备文件名不一致的话,需要用:
RMAN> catalog start with '<path where the actual standby datafile existed>';
RMAN> Catalog start with '/u01/app/oracle/oradata/clone/';
SWITCH DATABASE TO COPY;
参考:
Rolling Forward a Physical Standby Using Recover From Service Command in 12c (文档 ID 1987763.1)
另外关restore from service
在Oracle 12c中,可以在主数据库和备用数据库之间用一个服务名重新获得或恢复数据文件、控制文件、参数文件(SPFILE)、表空间或整个数据库。
这对于同步主数据库和备用数据库极为有用。
当主数据库和备用数据库之间存在相当大的差异时,不再需要复杂的前滚流程来填补它们之间的差异。RMAN能够通过网络执行备用恢复以进行增量备份,
并且可以将它们应用到物理备用数据库。可以用服务名直接将所需数据文件从备用点拷贝至主站,这是为了防止主数据库上数据文件、表空间的丢失,
或是没有真正从备份集恢复数据文件。
具体的几种用法:
数据库级别:restore database from service <服务别名>
表空间: restore tablespace from service <服务别名>
控制文件:restore controlfile to '指定的位置' from service <服务别名>
SPFILE: restore spfile from service <服务别名>
以下命令演示了如何用此新功能执行一个前滚来对备用数据库和主数据库进行同步。在物理备用数据库上:
rman target "username/password@standby_db_tns as SYSBACKUP"
RMAN>RECOVER DATABASE FROM SERVICE primary_db_tns USING COMPRESSED BACKUPSET;
以上案例使用备用数据库上定义的primary_db_tns连接字符串连接到主数据库,然后执行了一个增量备份,再将这些增量备份传输至备用目的地,
接着将应用这些文件到备用数据库来进行同步。然而,需要确保已经对primary_db_tns进行了配置,即在备份数据库端将其指向主数据库。




