Oracle 12c系列(八)|RMAN (FROM SERVICE)

相信大家在Dataguard环境中遇到过主库丢失归档日志,而备库也没有及时接收,导致备库出现了GAP的现象。因为日志的中断,备库无法再去应用之后的日志,就无法起到容灾的效果。

遇到这种故障,往往主库如果数据很大的时候,大家都不会去选择重新搭建来恢复备库,而会去选择更轻的增量恢复来解决问题。

即使如此,一旦主库数据量过大,每日变化量也极多,进行一次增量恢复其实也需要大量的时间以及备份集所需要的空间。甚至,在GAP期间,如果主库新增了数据文件,那么也会增加任务量。

在12cR1开始,RMAN提供了一个from service的子句让备库可以通过网络来执行recover和restore命令。

The FROM SERVICE clause provides the service name of the physical standby database from which the files must be restored. During the restore operation, RMAN creates backup sets, on the physical standby database, of the files that need to be restored and then transfers these backup sets to the target database over the network.

那在哪些情况下可以使用这个新特性呢

  • 当备库出现GAP,而主库丢失归档需要做增量备份的时候
  • 当备库丢失数据文件、控制文件以及表空间的需要restore的时候

这个特性其实大大缩减了备库在一些丢失归档需要做增量备份的情况下的工作量,将需要在主备库来回切换的操作简化为只需要在备库进行操作就可以完成。

关于如何运用这一特性,用些简单的例子来试验下。

备库增量恢复演示

模拟一个拥有GAP的备库的环境:

SQL> select * from v$archive_gap;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#     CON_ID
---------- ------------- -------------- ----------
 1      1231       1234      1
 2       762        765      1
SQL> show parameter fal
NAME                     TYPE           VALUE
------------------------------------ ---------------------- ------------------------------
fal_client               string         slave_db
fal_server               string         primary_db

查询可知主库tnsname连接串名为primary_db

step 1 查询备库当前SCN

RMAN> select current_scn from v$database;
CURRENT_SCN
-----------
37537287

这里提一下,12c 开始,RMAN可以直接执行很多命令,而不需要去使用sql 'sql'的句式去执行。

然后起至nomount状态

RMAN> startup force nomount
Oracle instance started
Total System Global Area    2147483648 bytes
Fixed Size                     8794848 bytes
Variable Size                486542624 bytes
Database Buffers            1644167168 bytes
Redo Buffers                   7979008 bytes

step 2

备库通过from service子句进行增量恢复

RMAN> restore standby controlfile from service primary_db;
Starting restore at 2018-06-01 12:26:40
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=21 device type=DISK
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: using network backup set from service primary_db
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
output file name=/data/data1/control01.ctl
Finished restore at 2018-06-01 12:26:43
RMAN> alter database mount;

为防止在GAP期间有新增的数据文件 

可以在主库查询断档之后主库新增的数据文件

SQL> select file# from v$datafile where creation_change# > =37537287;
 FILE#
----------
    47

通过from service恢复命令将新增的数据文件通过网络在备库恢复。

RMAN>run
{
SET NEWNAME FOR DATABASE TO '/data/data1/AXTEST/datafile/%f_%U';
RESTORE DATAFILE 47 FROM SERVICE primary_db;
}
executing command: SET NEWNAME
Starting restore at 2018-06-01 12:35:12
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=785 device type=DISK
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: using network backup set from service primary_db
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00047 to /data/data1/AXTEST/datafile/47_data_D-ZZ_TS-TEST1_FNO-47
channel ORA_DISK_1: restore complete, elapsed time: 00:00:15
Finished restore at 2018-06-01 12:35:28

因为主备库数据文件路径不一致,需要使用catalog与copy将数据名更新一致。

RMAN> catalog start with '/data/data1';
RMAN> switch database to copy;

step 3 至此,可以进行增量恢复了  在from service句式中还是可以使用常规备份时候使用的参数

  • SECTION SIZE (在传输时使用并发备份集传输)
  • USING COMPRESSED BACKUPSET (在传输时使用压缩,减轻网络压力)
RMAN> recover database from service primary_db noredo SECTION SIZE 1G USING COMPRESSED BACKUPSET;
....
destination for restore of datafile 00037: /data/data1/AXTEST/688A86E561085C8CE053BB3C0A0A7969/datafile/o1_mf_undo_2_88t4ahp9_.dbf
channel ORA_DISK_1: restoring section 1 of 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
Finished recover at 2018-06-01 13:45:00
#接下来就是正常的起库开启实时日志恢复了

通过这种方式可以很快的去解决一些备库需要做增量恢复或者数据文件丢失的故障。

当然,需要使用from service句式时有些必要的条件:

  • 两个数据库之间tns必须保持可以连接的状态
  • 两个数据库密码文件必须保持一致
  • 两个数据库的 COMPATIBLE参数必须为12.0

|  作者简介

陈康,沃趣科技数据库技术专家

主要参与公司产品实施、测试、维护以及优化。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

Oracle ADDM性能诊断利器及报告解读

性能优化是一个永恒的话题,性能优化也是最具有价值,最值得花费精力深入研究的一个课题,因为资源是有限的,时间是有限的。在Oracle数据库中,随着Oracle功能...

17120
来自专栏数据和云

深入剖析:update pk会发生什么?

张大朋(Lunar)Oracle 资深技术专家 Lunar 拥有超过十年的 ORACLE SUPPORT 从业经验,曾经服务于ORACLE ACS部门,现就职于...

30680
来自专栏数据和云

Oracle 12.2新特性掌上手册 - 第七卷 Big Data and Data Warehousing

编辑手记:也许Oracle 12.2在内核上的智能改进只能让你眼前一亮,那今天基于Big Data和数据仓库的性能优化增强则会让你伸手触Oracle的强大灵魂。...

31670
来自专栏更流畅、简洁的软件开发方式

利用虚拟硬盘(把内存当作硬盘)来提高数据库的效率(目前只针对SQL Server 2000)可以提高很多

      虚拟硬盘:就是把内存当作硬盘来用,比如有2G的内存,那么可以拿出来1G的内存当作硬盘来用。       自从知道了“虚拟硬盘”这个东东,我就一直在想...

53250
来自专栏Web项目聚集地

Spring MVC+Spring+Mybatis实现支付宝支付功能(图文详解)

本教程详细介绍了如何使用ssm框架实现支付宝支付功能。本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解...

29710
来自专栏杨建荣的学习笔记

通过shell绑定系统进程调优 (r4笔记第34天)

数据库的性能调优,需要基于操作系统的性能指标,如果操作系统级发生了一些状况,那么会潜移默化的影响到数据库层面。而数据库中对应的进程和操作系统级也有一定的映射关系...

32350
来自专栏杨建荣的学习笔记

linux kernel引发的oracle问题及解决

最近测试环境的连接数老是不够用,session/process 都相应的从5000提到了8000,但还是不够,而且还是不断有新环境需要增加。最后根据评估,ses...

42160
来自专栏Hadoop数据仓库

配置 Oracle 透明网关访问 SQL Server

试验环境: OS:XP Oracle 10.1 SQLSERVER2000 HOSTNAME:home-30b98e1e20 都使用 tcp/ip 默认端口 ...

24170
来自专栏杨建荣的学习笔记

ADG备库批量查询失败的原因分析(r8笔记第33天)

目前线上有一套环境是10gR2的,采用了一主两备的架构。在其中一个备库上每天凌晨会开放一个窗口运行一些批量的查询,目前使用dg broker会在指定的时间把备库...

37580
来自专栏hadoop学习笔记

全文检索Solr集成HanLP中文分词

以前发布过HanLP的Lucene插件,后来很多人跟我说其实Solr更流行(反正我是觉得既然Solr是Lucene的子项目,那么稍微改改配置就能支持Solr),...

20830

扫码关注云+社区

领取腾讯云代金券