浅析Oracle 12c中Data Guard新特性

 

写在前面

无论是做Oracle运维的小伙伴还是老伙伴,想必对Oracle数据库的数据级灾备核心技术—Data Guard是再熟悉不过了!这项从Oracle 8i就开始大面积普及的数据复制与灾备技术以其久经考验的成熟性、易用性和可靠性,受到了Oracle DBA界的一致好评,曾经一度是HA和DR,甚至数据迁移时的首选技术。然而近年来业界涌现的一系列新型技术方案,如基于日志的逻辑复制技术和存储底层复制技术等,有在某些方面超越Data Guard的趋势,甚至越来越多的DBA相信这项火了十多年的技术也差不多快寿终正寝了。。。

不过Oracle就是这么任性,在大家都原以为会有颠覆性改变的12c版本中,不但保留了Data Guard作为数据灾备尤其是物理级灾备的核心地位,而且针对原有技术中的痛点,加入了若干实用又有趣的新特性,使之再次焕发出新的魅力!今天小编就带大家领略一下,在12c中Data Guard又给我们带来了什么~

没毛病

无需妥协

为两地三中心设计的Far Sync

近几年两地三中心已经成为大型成熟企业的标准灾备架构,而谈到灾备当然就离不开数据级灾备,对于Oracle数据库来说,就是Data Guard技术。然而架构师和DBA常常苦恼于Data Guard配置方案的权衡:如果采用SYNC同步传输模式,虽然备库与主库的同步会更紧密,遇到事故时数据保护的更好,但是毕竟对生产性能有一定影响,而绝大多数数据中心的首要任务是保障生产;但是如果配置为ASYNC异步模式,虽然对于主库的性能影响小了,但是备库与主库之间必然出现一定的延迟,这对于数据完整性要求很严格的交易类系统是比较严重的风险。而如果使用级联DG(Cascade Data Guard),又不得不在中转节点放置一整套存储来实现DG的搭建,存储的消耗与主库是一样的,这又是一定程度上资源的浪费。想必设计师只能在多种方案间权衡利弊,反复妥协,左右为难。

而在12c版本中,这个棘手问题的大救星终于来了,它就是Far Sync技术。

Far Sync

在Oracle 12c中,新增一种称为Far Sync的实例类型(instance type),如同rdbms和ASM实例,far sync本身就是一种特殊类型的实例,它不运行数据库,没有数据文件,而只有日志文件,是一种专门用于Data Guard配置中负责日志转发的轻量级实例。这个far sync实例需要配置在离主库距离不远的机房,例如同数据中心的其他机房或者同城灾备的机房,以便实现同步日志传输。

Far Sync实例的创建也是很简单的:

只需要拷贝主库的参数文件和密码文件,使用standby control file和standby redo logfile即可完成far sync实例的创建;由于far sync不运行实际的数据库,也就没有数据文件,对于存储的需求量是很低的。

然后我们就可以配置基于far sync的Data Guard架构了,如图所示,我们可以在主库(Primary)的附近搭建far sync实例,并在主库与Far sync,以及Far sync与远程的备库(standby)之间分别配置Data Guard。这里的far sync可以看做主库传输日志的一个destination,而备库standby又作为far sync的destination,类似于Cascade Data Guard,但是别忘了,far sync是没有数据文件的,只负责转发日志。

搭建完毕后,我们就可以开始Data Guard的日志传输了:在这个新式的配置中,主库与far sync之间采用SYNC同步传输模式,而far sync与备库之间采用ASYNC异步传输模式。这样做的好处大家应该也能猜到了:由于far sync离主库距离很近,所以SYNC模式不会造成什么性能影响,而且又保证了主库的日志可以得到灾备的保护;同时far sync实例再继续以ASYNC异步模式将日志传输到备库,由于far sync已经有了主库产生的全部日志,这些日志传输到备库只是时间问题,因此主库也不再需要苦苦地等待备库发送ACK回来才能commit事务,而是将后续的日志转发工作交给了far sync去完成,自己可以轻装上阵,保证生产。

值得注意的是,在12c中Oracle强烈推荐使用DG Broker完成DG的管理,尤其是对于多于一个备库的情况,如果不使用broker,那管理起来简直就是一场噩梦。复杂的拓扑结构和繁多的属性,如果没有使用broker获得一个自上而下的整体视图,会让管理员很快懵逼,而做切换的时候需要协调N多个实例和备库的角色关系,没有broker的话就几乎是mission impossible了!

一个配置完成的far sync结构如下图所示:(就是我们在broker中看到的)

DG

从图中我们可以清晰的看到整个Data Guard的整体配置情况,哪个是主库,哪个是备库,哪个是far sync,一目了然。更重要的是我们在后续的修改属性和角色切换的时候,可以一键式管理,大大减轻了管理员的工作负担,减少了人为失误的可能性。这里要为DG broker这款工具点个赞!

中庸之道

最大可用模式中的FAST SYNC

来,敲黑板,我们先复习一下:在Oracle 11g中,DataGuard主要有两种日志传输模式—同步SYNC AFFIRM和异步ASYNC NOAFFIRM(当然还有ARCH模式,但是由于LGWR ASYNC的性能已经得到极大优化,ARCH模式已经不再推荐)。通常最大性能模式下使用ASYNC NOAFFIRM,即日志从主库传输出去之后就可以完成事务commit,而无需收到来自备库的确认ACK;而在最大保护和最大可用模式下使用SYNC AFFIRM,即必须保证每笔事务都正确传输到备库并写入磁盘,主库收到备库的确认ACK之后才可以完成提交,否则主库必须等待。

有一定DG维护经验的DBA会感觉到,最大可用模式作为一种介于最大性能和最大保护之间的折中模式,使用SYNC AFFIRM有些过了,多数情况下可能不需要牺牲这么大的性能来换取如此严苛的数据保护。因此12c给最大可用模式提供了一种称为 FAST SYNC的模式,也就是SYNC NOAFFIRM,主库与备库之间仍然以同步模式传输,但是主库只需等待备库收到日志即可,而无需进一步等待备库的日志写入磁盘才能提交,这就大大降低了性能的损耗,同时仍可以保证主库备库之间的数据同步。

FAST SYNC的配置也很简单:

我们可以在参数文件和DG Broker中实现FAST SYNC的配置

当然了FAST SYNC这个FAST也不是白来的,那么我们考虑一下,什么情况下FAST SYNC比SYNC的保护弱呢?我们知道,二者的主要区别在于是否等待备库收到日志后写入磁盘。那么答案也就显而易见了:如果主库故障之后,由于继发性故障或者纯粹运气不好,备库的内存信息没有来得及写入磁盘,那么内存中的最新日志信息就会丢失,造成数据不一致。所以是否采用FAST SYNC替代SYNC模式,就要看能否接受这个小概率事件的风险了。

升级神器

Data Guard rolling

作为一名DBA恐怕最害怕听见的词汇就是升级/迁移了---那意味着不知多少个不眠之夜,以及各种明处暗处的技术风险。Logical Data Guard作为一种常用的升级/迁移技术方案,因其可靠性高,停业时间短受到了DBA们的欢迎。但是这套方案的一个不足之处就是实施过程过于复杂,小编粗粗一算至少需要42个步骤才能完成一轮最简单的一主一备升级,如果涉及多套库,那这个复杂性会指数级地倍增。为了降低采用rolling技术升级的复杂性,减少人为失误可能带来的损失,oracle在12c中提供了新的DBMS_ROLLING包来帮助我们自动化地完成一系列升级任务。

DBMS_ROLLING包采用Specification—Compilation—Execution三步走的协议,只需DBA设置几个参数,即可自动实现后续的一系列配置、切换、启停库、验证等操作。在DBMS_ROLLING中有leading group和trailing group的概念,我们暂时简单理解为初始的备库和主库就好,实施的步骤包括初始化—设置参数—生成计划—验证计划—执行切换—收尾等过程。

之后继续调用DBMS_ROLLING.START_PLAN, DBMS_ROLLING.SWITCHOVER, DBMS_ROLLING.FINISH_PLAN这三个存储过程,即可实现自动化的切换升级。

DG Broker的Routing规则集

在最简单的一主一备配置中,日志的传输路由是显而易见的;但是如果Data Guard的配置涉及多个备库,尤其是我们上面提到的far sync,拓扑结构极为复杂,那么如果有效管理如此多的数据库的传输路由便成了令人头疼的难题。好在Oracle 12c的DG Broker为我们提供了Routing Rule这个新特性,可以傻瓜式地设置和管理多库环境下的传输路由。

我们假设Boston是主库,Cambridge是far sync,Chicago是物理备库,Shaumburg是反向far sync(切换后才工作),那么我们需要的路由便是:当Boston是主库时,日志先传输到Cambridge这个far sync,再转发到备库Chicago;而当切换主备库之后,新的主库Chicago将日志先传输到Shaumburg这个反向far sync,然后再转发到Boston。如果使用sqlplus中逐个修改参数的方法,不但容易出错,而且DBA也无法从整体上监控整个DG的完整拓扑;而我们现在使用DG Broker提供的Routing rule特性,只需简单的几条配置命令即可完成配置,还可以利用DGMGRL接口管理整个DG的配置信息:

当我们配置完成后,即可看到DG Broker的配置成功生效了:

这样看是不是清晰多了?各种角色的拓扑关系一目了然,而且一键式切换之后,可以立刻看到切换成功之后的角色和路由关系,这样也就不需要挨个登录每套数据库检查参数然后再自行脑补出DG的整个情况了。

浅析Oracle 12c中Data Guard新特性的更多相关文章

  1. Oracle 12cR1中性能优化新特性之全数据库缓冲模式

    通常情况下,Oracle会决定哪些数据会留在缓冲区中.当没足够的空间时,数据会被写出内存.此外,为了避免大量读取将有用的信息挤出缓冲区,Oracle对有些操作也许会才去绕过缓冲区的措施.Oracle1 ...

  2. Oracle 11g中的snapshot standby特性

    在Oracle 11g中,data guard最吸引人的,除了active data guard的实时查询特性(即可以以只读方式打开物理standby数据库的同时MRP进程能继续做recover),快 ...

  3. atitit.Oracle 9 10 11 12新特性attilax总结

    atitit.Oracle 9  10 11  12新特性 1. ORACLE 11G新特性 1 1.1. oracle11G新特性 1 1.2. 审计 1 1.3. 1.   审计简介 1 1.4. ...

  4. Oracle12c中数据泵新特性之功能增强(expdp, impdp)

    Oracle的数据泵功能在10g中被引进.本文对数据泵在12c中的增强做一个概览. 1.   禁用日志选项(DISABLE_ARCHIVE_LOGGING) Impdp的TRANSFORM参数已经扩展 ...

  5. Xcode中StoryBoard Reference 新特性的使用

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  6. Oracle 12c中新建pdb用户登录问题分析

    Oracle 12c新建用户登录问题分析1 用sys用户新建用户,提示公用用户名或角色名无效.原因:Oracle 12c中,在容器中建用户(或者应该称为使用者),须在用户名前加c##.默认登录连接的就 ...

  7. Jdk5.0中出现的新特性

    掌握jdk5.0中出现的新特性1.泛型(Generics)2.增强的"for"循环(Enhanced For loop)3.自动装箱/自动拆箱(Autoboxing/unboxin ...

  8. oracle 12c 中asm元数据是否有所变化

    详见原文博客链接地址: oracle 12c 中asm元数据是否有所变化

  9. MVC中的其他新特性

    MVC中的其他新特性 (GlobalImport全局导入功能) 默认新建立的MVC程序中,在Views目录下,新增加了一个_GlobalImport.cshtml文件和_ViewStart.cshtm ...

随机推荐

  1. php的explode()和split()的区别

    都是分割,区别就是,split要用转移字符: 1.   $test = end(explode('.', 'abc.txt'));    echo $test;//output txt   2.    ...

  2. 别被官方文档迷惑了!这篇文章帮你详解yarn公平调度

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由@edwinhzhang发表于云+社区专栏 FairScheduler是yarn常用的调度器,但是仅仅参考官方文档,有很多参数和概念文 ...

  3. java开发一个应用的总结

    需要注意的地方: (1)业务点要提前列出来,这样可防止遗漏: (2)关键业务点一定要反复确定,最好能做个测试demo出来,在没有完成之前,Everything is possible: (3)有陌生的 ...

  4. centos6.5下yum安装mysql5.5

    第一步就是看linu是否安装了mysql,经过rpm -qa|grep mysql查看到centos下安装了mysql5.1,那就开始卸载咯 2 接下来就是卸载mysql5.1了,命令:rpm -e ...

  5. 【JavaScript 从零开始】 语言核心部分----可选的分号

    Node.js很是火爆,前段待遇好的飞起.... 于是我决定.... 重头开始学习JavaScript有些比较特别的,或者之前我们注意到,再或者容易出错东西我会记录下来. 可选的分号 和其他许多编程语 ...

  6. FOR XML PATH做为数据表中单列或者多列的字符串拼接的方法,放到一列中去,很好用。

    先看看自己弄得例子,SELECT sName+',',hoppy+','  FROM student2 where hoppy='游泳' FOR XML PATH('')--PATH后面跟的是行标题, ...

  7. Apache Spark Exception in thread “main” java.lang.NoClassDefFoundError: scala/collection/GenTraversableOnce$class

    问题: 今天用Maven搭建了一个Spark的Scala项目,运行后遇到下面异常: Apache Spark Exception in thread “main” java.lang.NoClassD ...

  8. iOS开发消息推送原理

    转载自:http://www.cnblogs.com/cdts_change/p/3240893.html 一.消息推送原理: 在实现消息推送之前先提及几个于推送相关概念,如下图1-1: 1.Prov ...

  9. 【原】Nginx搭建FTP服务器的细节问题

    关于文件服务器很多实现方法,比如采用阿里的分布式文件系统FastDFS,以及自己内部搭建FTP服务器,这里记录一下关于nginx搭建FTP文件系统流程. ftp服务器搭建的步骤网上也是很多,这里贴一下 ...

  10. MarkDownPad 专业汉化破解

     解压Pa_ttrar 运行Pa_ttrar.exe    点击下边第一个按钮“patch”——>弹出窗选择“YES”  选择“YES”后会选择一个文件,找到“C:\Users\用户名\AppD ...