首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Oracle 19c搭建DG Far Sync日志备库

Oracle 19c搭建DG Far Sync日志备库

作者头像
胖头鱼的鱼缸
发布2026-07-02 15:14:49
发布2026-07-02 15:14:49
1250
举报

数据库管理-第399期 Oracle 19c搭建DG Far Sync日志备库(20260107)

914fcc7ad57defa7868c3be1ca7fb4f5.jpg
914fcc7ad57defa7868c3be1ca7fb4f5.jpg

调皮一下:虽然本文介绍的是Oracle数据库技术,但并非“49年加入国军”

Oracle DataGuard Far Sync是12c引入的新特性,可以在ADG配置中添加一个独立的用于转储归档日志的特殊备库,可以看做级联备库的一个变种,其主要目的是为了解决远距离容灾传输的延迟,避免日志传输过程中因主库异常中断、网络波动/中断、备库异常等导致数据丢失,做到RPO=0(即数据零丢失)。

当然因为网络环境的进步、成本控制与运维复杂度等因素,这是一个在生成环境中不常用的功能,但是在数据库国产化迁移与同步过程中,这却成了一个非常好用的功能特性。

1 RAC下同步数据的痛点

首先我们看看Oracle Exadata下,ASM实例的PGA与SGA配置:

image.png
image.png

在这里可以看到ASM实例的PGA配置为400M,SGA配置为3G,都是相对较小,为什么要看这个呢,我们要了解数据同步的机制,主要是全量同步和实时增量同步:

  • 全量同步:可以使用SCN+UNDO实现一次性拉取
  • 实时增量同步:需要解析数据库操作日志,将数据操作同步到国产数据库中

实时增量同步一般还要求所有表有主键并开启附加日志(这里就不做更详细的介绍了),而解析日志可以通过Oracle Logminr工具从数据库实例中解析数据库归档日志,但这会带来一些其他问题:

  • 数据库压力增大:如果单次日志解析范围或频次配置不合理,很容易对源库带来更多的压力,特别是多租户环境下
  • 性能不足:通过数据库实例使用Logminr工具解析日志往往满足不了数据实时同步的性能要求

因此很多数据库/数据同步厂商就要求提供ASM的高权限访问账号,直接通过ASM拉取日志解析,以满足性能要求,但这还是会带来一些问题:

  • ASM实例PGA和SGA配置较小,大量拉取对ASM稳定性可能带来影响,调整相关参数又涉及集群重启
  • ASM实例高权限账号几乎可以读取所有ASM中的文件,这是有一定安全隐患和合规风险的

既然实时同步需求只需要解析归档日志那么回看Far Sync,是不是就非常合适了!

2 配置Far Sync

这里使用(单实例+ASM)+ 单实例来模拟RAC→单实例的DG Far Sync环境配置:

image.png
image.png

这里省略数据库软件与建库流程(已开启归档),Far Sync备库还需要通过netca创建监听(省略)。这里其实就是要模拟主库与日志备库下面参数的一些差异:

image.png
image.png

2.1 主库配置

oracle用户下,数据库中执行:

代码语言:javascript
复制
alter database force logging;
alter systemset standby_file_management=AUTO;
alter systemset dg_broker_config_file1='+DATAC1/DBAAS/dr1dbaas.dat';
alter systemset dg_broker_config_file2='+RECOC1/DBAAS/dr2dbaas.dat';

-- 根据实际REDO日志大小配置
-- RAC需要配置thread,每个thread日志组数量大于对应REDO日志组1-2个
alter database add standby logfile group31 ('+DATAC1') size 200M;
alter database add standby logfile group32 ('+DATAC1') size 200M;
alter database add standby logfile group33 ('+DATAC1') size 200M;
alter database add standby logfile group34 ('+DATAC1') size 200M;

2.2 生成参数文件并传输至日志备库

代码语言:javascript
复制
create pfile='/home/oracle/initdbarch.ora' from spfile;
代码语言:javascript
复制
scp /home/oracle/initdbarch.ora db02:~

2.3 备库修改配置文件

编辑initdbarch.ora:

代码语言:javascript
复制
#删除/修改RAC相关内容(根据实际环境)
#将dbaas相关内容修改为dbarch(本次环境)
#添加
db_unique_name='dbarch'

#修改
*.audit_file_dest='/u01/app/oracle/admin/dbarch/adump'
*.control_files='/u01/app/oracle/oradata/dbarch/control01.ctl','/u01/app/oracle/fast_recovery_area/dbarch/control02.ctl'
*.db_create_file_dest='/u01/app/oracle/oradata'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.dg_broker_config_file1='/u01/app/oracle/oradata/dbarch/dr1dbarch.dat'
*.dg_broker_config_file2='/u01/app/oracle/fast_recovery_area/dbarch/dr2dbarch.dat'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=dbarchXDB)'
*.local_listener='LISTENER_DBARCH'

创建spfile:

代码语言:javascript
复制
create spfile from pfile='/home/oracle/initdbarch.ora';

2.4 配置备库静态监听

代码语言:javascript
复制
cd $ORACLE_HOME/network/admin

编辑listener.ora,添加以下内容:

代码语言:javascript
复制
SID_LIST_LISTENER=
  (SID_LIST=
      (SID_DESC=
         (GLOBAL_DBNAME=dbarch)
         (SID_NAME=dbarch                     
         (ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1)
      )
  )
代码语言:javascript
复制
lsnrctl reload
image.png
image.png

2.5 主备库配置本地命名

代码语言:javascript
复制
cd $ORACLE_HOME/network/admin

编辑tnsnames.ora,编辑为以下内容:

代码语言:javascript
复制
#主库
DBAAS =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.19)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = dbaas)
    )
  )

DBARCH =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.119)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = dbaas)
    )
  )

LISTENER_DBAAS =
  (ADDRESS = (PROTOCOL = TCP)(HOST = db01)(PORT = 1521))

#备库
DBAAS =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.19)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = dbarch)
    )
  )

DBARCH =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.119)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = dbarch)
    )
  )

LISTENER_DBARCH =
  (ADDRESS = (PROTOCOL = TCP)(HOST = db02)(PORT = 1521))

2.6 传输密码文件

代码语言:javascript
复制
scp /u01/app/oracle/product/19.0.0/dbhome_1/dbs/orapwdbaas db02:/u01/app/oracle/product/19.0.0/dbhome_1/dbs/orapwdbarch
# RAC环境中需要现在asmcmd中将ASM中的密码文件复制到本地再传输至备库,同时注意权限:
# -rw-r----- 1 oracle oinstall 2048 Jan  6 01:35 orapwdbaas

2.7 日志备库创建目录

代码语言:javascript
复制
mkdir -p /u01/app/oracle/oradata/dbarch
mkdir -p /u01/app/oracle/fast_recovery_area/dbarch
mkdir -p /u01/app/oracle/admin/dbarch/adump

2.8 启动日志备库至nomount

代码语言:javascript
复制
startup nomount
image.png
image.png

2.9 复制日志备库

代码语言:javascript
复制
rman target sys/oracle@dbaas auxiliary sys/oracle@dbarch
代码语言:javascript
复制
duplicate target database for farsync from active database;
image.png
image.png

2.9 开启db_broker

主备数据库均执行:

代码语言:javascript
复制
alter system set dg_broker_start=true;

2.10 创建DG配置

代码语言:javascript
复制
dgmgrl sys/oracle@dbaas
代码语言:javascript
复制
create configuration 'dbdg' as primary databaseis dbaas connect identifier is dbaas;
add far_sync dbarch as connect identifier is dbarch;
enable configuration;
image.png
image.png

3 检查Far Sync

3.1 DG配置

代码语言:javascript
复制
show configuration
show database dbaas
show far_sync dbarch
image.png
image.png

3.2 备库文件

image.png
image.png

控制文件,DG配置文件,standby logfile和归档日志均正常生成。

3.3 切换日志测试

主库切换日志:

代码语言:javascript
复制
alter system switch logfile;
image.png
image.png

备库正常生成新的归档日志。 至此DG Far Sync日志备库搭建完成,同步工具可以从日志备库解析日志。

注意: 在实际生成中如果配置了主库归档清除策略,需要测试归档是否能正常删除,是否需要添加force关键字;日志备库同理

总结

本期介绍了DG Far Sync日志备库在数据库国产化过程中的非常规用法与搭建流程。 老规矩,知道写了些啥。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 胖头鱼的鱼缸 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据库管理-第399期 Oracle 19c搭建DG Far Sync日志备库(20260107)
    • 1 RAC下同步数据的痛点
    • 2 配置Far Sync
      • 2.1 主库配置
      • 2.2 生成参数文件并传输至日志备库
      • 2.3 备库修改配置文件
      • 2.4 配置备库静态监听
      • 2.5 主备库配置本地命名
      • 2.6 传输密码文件
      • 2.7 日志备库创建目录
      • 2.8 启动日志备库至nomount
      • 2.9 复制日志备库
      • 2.9 开启db_broker
      • 2.10 创建DG配置
    • 3 检查Far Sync
      • 3.1 DG配置
      • 3.2 备库文件
      • 3.3 切换日志测试
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档