Benjamin Zhang

目前就职于中科院计算机网络信息中心,主要兴趣集中在数据库,操作系统,中间件。

【DATAGUARD】DATAGUARD的介绍

26 Mar 2019 » Oracle

DATAGUARD的介绍

1.Oracle DataGuard 简介

Oracle DataGuard是Oracle开发的一种数据库级别的HA方案,最主要功能是冗灾、数据保护、故障恢复等,它是生产数据库的“事务一致性镜像”,DataGuard创建时,使用主数据库的物理镜像备份;DataGuard创建完成后,备数据库会通过主数据库传输过来的归档日志自动维护备用数据库,将重做数据应用到备用数据库,以保证数据一致性。

1.1 Oracle DataGuard 结构

Data Guard是一个集合,由一个Primary数据库(生产数据库)及一个或多个Standby数据库组成。组成Data Guard的各个Oracle数据库之间,通过Oracle的网络服务名(Net Service Name)连接,并且可以分布于不同地域,实际上只要各库之间能够互相通行,他们的物理位置就没有什么限制。

1.1.1 Primary Database

Primary数据库是一个生产数据库,大部分的应用都读写此数据库。该数据库可以是单实例数据库也可以是RAC数据库。

1.1.2 Standby Databases

Standby数据库是一个Primary数据库的“事务一致性镜像”。通俗地话来讲是一个从数据库,在同一套Data Guard结构中最多可以创建30个Standby数据库。一旦创建完成,DataGuard自动应用Primary数据库生成的重做日志(redo log)的方式,来维护每一个Standby数据库。standby数据库既可以是单实例数据库,也可以使RAC结构。

​ Standby数据库分为三类:物理Standby和逻辑Standby,快照Standby。

  • 物理Standby数据库

    物理Standby是与主数据完全一样的镜像,它通过接收Primary数据库生成的REDO LOG后,以介质恢复的方式实现同步(Redo Apply).因此底层的物理文件结构都一致

    作为Oracle Database 11g版本,物理standby数据库可以以只读的方式接受和应用redo数据.物理standby数据库就可以既做数据冗余保护也可以用来做报表查询分析。

    运用场景:数据保护,报表分析

  • 逻辑Standby数据库

    逻辑standby是通过接收Primary数据库的redo数据,然后将其转换成SQL语句,写入Standby数据库中。这种技术为SQL Apply,因此底层的物理文件结构不一致。

    运用场景:数据保护,报表分析和数据库升级

  • 快照Standby数据库

    快照Standby数据库不会应用接收过来的redo数据。直到Stanby数据库切换到物理Standby数据库的时候,才会接收过来的redo数据。

1.1.3 Oracle DataGuard实例

dg01.png

1.2 DataGuard 服务

1.2.1 Redo传输服务[Redo Transport Services]

Oracle通过Redo Transport services控制redo数据,从Primary数据库发送到一个或多个归档目的地。归档目的地可以指向本地路径,也可以指向一个远端的Service Name。最常见的启动数据库归档模式,就是设置一个本地的归档路径,而架设Standby服务器,则是设置一个或多个远端的Service Name,通过这种方式发送Primary端生成的REDO数据 。

  • 按照既定配置传输Redo数据到Standby 数据库。

  • 处理由于网络中断等原因等导致的归档中断(Gap)。

  • 自动检测丢失和损坏的归档日志文件(archive log file),并自动尝试从Primary数据库或者另外的standby数据库中抽取出来

1.2.2 应用服务[Apply Services]

应用服务自动应用接收过来的redo数据到standby数据库来维护与Primary数据库的事务一致性。它同时可以以只读的方式读取数据

物理standby和逻辑standby数据库在应用服务(Apply Service)应用归档redo数据的主要区别:

  • 对于物理standby数据库,DataGuard使用Redo Apply技术。

    dg02.png

  • 对于逻辑standby数据库,DataGuard使用SQL Apply技术。

dg03.png

1.2.3 角色转换[Role Transitions]

一套DG环境中只有两种角色:Primary和Standby。所谓角色转换就是让数据库在这两个角色中切换,切换有两种:switchover和failover。

  • switchover:是在Primary数据库和Standby数据库之间做角色转换。一个switchover操作可以确保无数据丢失。典型的应用环境是在计划内地维护DG数据库。
  • failover:是当主数据库无法使用,主数据库发生故障并且不能被恢复的时候,就需要使用failover将standby数据库转换成Primary数据库。在最大保护模式或最高可用模式下,failover可以保证不会丢失数据。

角色转换可以通过SQL语句手动做切换,你也可以使用Oracle Data Guard broker工具执行角色切换和使用Oracle Enterprise Manager和DGMGRL 命令行接口完成自动化切换

1.3 Data Guard broker

Data Guard broker只一个分布式管理框架。用来创建,维护,监控Oracle Data Guard。你可以使用Oracle Enterprise Manager graphical user interface (GUI)或者Data Guard command-line interface (DGMGRL)控制。

  • 创建和启用Data Guard configurations,包括设置 redo传输服务(redo transport services)和应用服务(apply services)。

  • 管理整个Data Guard configurations包括在任何系统下的配置

  • 管理和监控Data Guard configurations包括Oracle RAC primary数据库和standby数据库

  • 你可以在OEM下一个简单的按钮或者在DGMGRL下一条简单的命令完成switchover和failover角色切换。

  • 启动fast-start failover,可以当primary数据库无效之后自动故障处理。Data Guard broker会判断一个failover是否是必须的,然后初始化fail over到指定的standby数据库,不需要DBA的介入。

加之,使用OEM可以更简单和自动化下列操作:

  • 从primary数据库的备份创建一个物理和逻辑standby数据库

  • 添加一个新的standby数据库到已经存在的DG集合中。

  • 监控日志应用比率,获取诊断信息。

1.4 Data Guard 保护模式

DG提供三种模式。

  • 最大保护模式(Maximum protection) ,这种模式能够确保绝无数据丢失。要实现这一步是有代价的,它要求所有的事务在提交前其REDO数据不仅要写入到本地的Online Redologs,还要同时写入Standby数据库的Standby Redologs,并确认REDO数据至少在一个Standby数据库中可用,然后才会在Primary数据库上才可提交。如果Standby数据库不可用的话,Primary数据库会被Shutdown。

  • 最高性能模式(Maximum performance),这是一种默认的保护模式,它在不影响Primary数据库性能的情况提供最高级别的数据保护策略。事务可以随时提交,写入到Online Redologs。Redo数据也同时会写入Standby数据库的Standby Redolog中。但是,这个过程是异步的。

​ 这种模式会提供最低的数据保护机制,但对数据库性能的影响最小。

  • 最高可用性(Maximum availability),这种模式在不影响Primary数据库可用前提下,提供最高级别的数据保护策略。实现方式与最大保护模式类似,也是要求本地事务在提交前必须写入一台Standby数据库的Standby Redologs中,不过与最大保护模式不同的是,如果出现故障导致Standby数据库无法访问的时候,Primary数据库并不会Shutdown,而是自动转为最高性能模式,等Standby数据库恢复正常之后,Primary数据库又会自动转换成最高可用性模式。

参考文献 Oracle Data Guard Concepts and Administration 11g Release 2 (11.2)