【new friends】点击标题下面蓝色字“恒生DBA公社”关注。
关注福利:
关注恒生DBA公社,回复18c,即可得到Oracle 18c outline官方手册
前沿
考虑到运行在Oracle数据库的核心数据的安全性,Oracle的容灾产品也一直推陈出新,12C的Active Data Guard Far Sync也孕育而生。
什么是Active Data Guard Far Sync?
Active Data Guard Far Sync是Oracle 12c的新功能(也称为Far Sync Standby),Far Sync功能的实现是通过在距离主库、相对较近的地点配置Far Sync实例,主库同步传输redo到Far Sync实例,然后Far Sync实例再将redo异步传输到终端备库。这样既可以保证零数据丢失又可以降低主库压力。FarSync实例只有密码文件,init参数文件和控制文件,而没有数据文件。
为什么要用far sync?
我们都知道Active Data Guard,如果redo 传输采用Maximum Availability模式,我们可以在距离生产中心(Primary Database)相对较近的地点配置Far Sync实例,主库(Primary Database)同步传输redo到Far Sync实例,保证零数据丢失(zero data loss),同时主库和Far Sync距离较近,网络延时很小,因此对主库性能影响很小。然后Far Sync实例再将redo异步发送到终端备库。
如果redo 传输采用Maximum Performance模式,我们可以在距离生产中心(Primary Database)相对较近的地点配置Far Sync实例,主库(Primary Database) 异步传输redo到Far 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 命令,就可以自动完成主备库的切换。




