暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

oracle数据库容灾利器之 Far Sync

恒生DBA公社 2021-04-21
4805


【new friends】点击标题下面蓝色字“恒生DBA公社”关注。

【old friends】点击右上角,转发或分享本页面内容。

关注福利:

关注恒生DBA公社,回复18c,即可得到Oracle 18c outline官方手册



前沿


考虑到运行在Oracle数据库的核心数据的安全性,Oracle的容灾产品也一直推陈出新,12C的Active Data Guard Far Sync也孕育而生。


 什么是Active Data Guard Far Sync

Active Data Guard Far SyncOracle 12c的新功能(也称为Far Sync Standby),Far Sync功能的实现是通过在距离主库、相对较近的地点配置Far Sync实例,主库同步传输redoFar Sync实例,然后Far Sync实例再将redo异步传输到终端备库。这样既可以保证零数据丢失又可以降低主库压力。FarSync实例只有密码文件,init参数文件和控制文件,而没有数据文件。


 为什么要用far sync

我们都知道Active Data Guard,如果redo 传输采用Maximum Availability模式,我们可以在距离生产中心(Primary Database)相对较近的地点配置Far Sync实例,主库(Primary Database)同步传输redoFar Sync实例,保证零数据丢失(zero data loss),同时主库和Far Sync距离较近,网络延时很小,因此对主库性能影响很小。然后Far Sync实例再将redo异步发送到终端备库。


如果redo 传输采用Maximum Performance模式,我们可以在距离生产中心(Primary Database)相对较近的地点配置Far Sync实例,主库(Primary Database) 异步传输redoFar Sync实例,然后Far Sync实例再负责传输redo到其他多个终端备库。这样可以减少主库向多个终端备库(StandbyDatabase)传输redo的压力。

Far Sync配置对于Data Guard 角色转换是透明的,即switchover/failover命令方式与12c之前相同。



在一主多备的数据库容灾架构中,主库不但要承担原本业务的压力,而且还要将redo日志传输到不同的备库端,这样对主库将产生很大的性能影响,而在Far Sync环境中,传输日志的压力大部分由Far Sync实例承担,而主库只需要把redo 传输到距离较近的farsync 实例,这样将在很大程度上减轻主库的负担,提升业务系统的性能。





 Active Data Guard Far Sync 搭建过程

通过以上了解可知,搭建ActiveData Guard Far Sync的基础就是有一套完整的active data guard 环境,创建far sync 实例与创建备库方式类似,但far sync 实例只需要创建参数文件,密码文件,redo日志文件,控制文件即可。

创建 far sync控制文件:

ALTER DATABASE CREATE FAR SYNC INSTANCE CONTROLFILE AS‘/tmp/controlfs01.ctl’;

然后拷贝到参数文件中指定的位置,启动到mount状态,然后添加standbyredo logfile far sync 实例是没有 online redo log的。


具体搭建过程这里就不再讨论。在这里给大家介绍一个非常实用的工具dg_broker

使用 Data Guard 命令行界面 (DGMGRL),你可从 DGMGRL 提示符或在脚本中控制和监视 Data Guard 配置,也可执行管理和监视数据库所要求的大部分活动。

1       启用dg_broker

主数据库和物理备用数据库的 DG_BROKER_START 初始化参数设置为TRUE

ALTER  SYSTEM  SET  dg_broker_start= true;

2       创建用于监听器的服务

要在代理程序运行期间启用DGMGRL 来重新启动实例,必须将一个具有特定名称的服务静态注册到每个实例的本地监听器。必须将 GLOBAL_DBNAME属性的值设为 <db_unique_name>_DGMGRL.<db_domain> 的连接,其中<db_domain> 可以忽悠。

如下:

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL =TCP)(HOST = 192.168.6.124)(PORT = 1522))

    )

  )

ADR_BASE_LISTENER = u01/app/oracle

SID_LIST_LISTENER=

 (SID_LIST =

   (SID_DESC =

     (GLOBAL_DBNAME =primary_DGMGRL)

     (ORACLE_HOME =/u01/app/oracle/product/11.2.0/dbhome_1)

     (SID_NAME = primary)

   )

   (SID_DESC =

     (GLOBAL_DBNAME =primary)

     (ORACLE_HOME =/u01/app/oracle/product/11.2.0/dbhome_1)

     (SID_NAME = primary)

   )

 )

在这里需要说明一下为什么一定要用静态监听,现在公司大多数客户数据库都在用动态监听,在客户和现场实施人员来看这种方式更加方便易用,但是在 data guard switchover ,也就是主备库进行切换的过程中,两个实例都会重启,如果用的是动态监听,在实例关闭的时候,监听程序无法注册该实例,所以不能通过tns连接到远程实例执行启动操作,这也就是为什么在进行主备切换的时候需要通过sqlplus的方式执行 startup ,此时如果是静态监听,实例启动与否都会在监听程序中注册,所以可以实现远程启动与关闭数据库实例,从而实现dg_broker在主备库的自动切换。

3       DGMGRL 配置

首先清除log_archive_dest_n(n>1) 参数设置,因为redo 日志的传输路径要通过DGMGRL配置。

alter system reest log_archive_dest_2scope=both;

连接到 dgmgrl 命令行工具

$ dgmgrl sys/oracle@targetdb

创建配置并添加主库

DGMGRL> create configuration ‘DGconfig’ as primary database is ‘primary’connect identifier is primary;

注:’ DGconfig’是配置的名称,可以随意指定,primary为主库的tns连接描述符,为了便于维护,通常与db_unique_name 相同。

添加far sync实例(实例名为 fs01 )

DGMGRL>  add far_sync fs01  as connect identifier is  fs01;

添加备库实例

DGMGRL> add database standby as connect identifier is standby;

设置主库redo传输路由

DGMGRL> edit database primary set property RedoRoutes=‘(LOCAL:FS01FASTSYNC)’; 

设置far sync实例redo 传输路由

DGMGRL> edit far_sync fs01 set property RedoRoutes=‘(primary:standby ASYNC)’;

设置备库redo 传输路由

DGMGRL> edit database standby set property RedoRoutes=‘(LOCAL : primary  FASTSYNC)’;

设置redo同步属性

DGMGRL> edit far_sync fs01 set property LogXptMode=‘FASTSYNC’;

设置保护模式

DGMGRL> edit configuration set protection mode as maxavailability;

启用配置

DGMGRL> enable configuration

查看配置

DGMGRL> show configuration
Configuration - DGconfig
Protection Mode: MaxAvailability
Members:
primary - Primary database
 fs01 - Far sync instance
  standby - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS (status updated 15 seconds ago)

至此, ActiveData Guard Far Sync就搭建完成。

 

       在需要进行主备切换的时候(通常客户会定期做切换测试),只需要在DGMGRL中执行 switchoverto standby/primary 命令,就可以自动完成主备库的切换。




文章转载自恒生DBA公社,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论