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

数据库管理399期 2026-01-07

  • [数据库管理-第399期 Oracle 19c搭建DG Far Sync日志备库(20260107)](#数据库管理-第399期 Oracle 19c搭建DG Far Sync日志备库(20260107))
    • [1 RAC下同步数据的痛点](#1 RAC下同步数据的痛点)
    • [2 配置Far Sync](#2 配置Far Sync)
      • [2.1 主库配置](#2.1 主库配置)
      • [2.2 生成参数文件并传输至日志备库](#2.2 生成参数文件并传输至日志备库)
      • [2.3 备库修改配置文件](#2.3 备库修改配置文件)
      • [2.4 配置备库静态监听](#2.4 配置备库静态监听)
      • [2.5 主备库配置本地命名](#2.5 主备库配置本地命名)
      • [2.6 传输密码文件](#2.6 传输密码文件)
      • [2.7 日志备库创建目录](#2.7 日志备库创建目录)
      • [2.8 启动日志备库至nomount](#2.8 启动日志备库至nomount)
      • [2.9 复制日志备库](#2.9 复制日志备库)
      • [2.9 开启db_broker](#2.9 开启db_broker)
      • [2.10 创建DG配置](#2.10 创建DG配置)
    • [3 检查Far Sync](#3 检查Far Sync)
      • [3.1 DG配置](#3.1 DG配置)
      • [3.2 备库文件](#3.2 备库文件)
      • [3.3 切换日志测试](#3.3 切换日志测试)
    • 总结

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

text 复制代码
作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database
PostgreSQL ACE

10年数据库行业经验
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP,ITPUB认证专家
圈内拥有"总监"称号,非著名社恐(社交恐怖分子)

公众号:胖头鱼的鱼缸
CSDN:胖头鱼的鱼缸(尹海文)
墨天轮:胖头鱼的鱼缸
ITPUB:yhw1809
IFClub:胖头鱼的鱼缸
除授权转载并标明出处外,均为"非法"抄袭

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

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

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

1 RAC下同步数据的痛点

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

在这里可以看到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环境配置:

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

2.1 主库配置

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

sql 复制代码
alter database force logging;
alter system set standby_file_management=AUTO;
alter system set dg_broker_config_file1='+DATAC1/DBAAS/dr1dbaas.dat';
alter system set dg_broker_config_file2='+RECOC1/DBAAS/dr2dbaas.dat';

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

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

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

2.3 备库修改配置文件

编辑initdbarch.ora:

text 复制代码
#删除/修改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:

sql 复制代码
create spfile from pfile='/home/oracle/initdbarch.ora';

2.4 配置备库静态监听

bash 复制代码
cd $ORACLE_HOME/network/admin

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

text 复制代码
SID_LIST_LISTENER=
  (SID_LIST=
      (SID_DESC=
         (GLOBAL_DBNAME=dbarch)
         (SID_NAME=dbarch                     
         (ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1)
      )
  )
bash 复制代码
lsnrctl reload

2.5 主备库配置本地命名

bash 复制代码
cd $ORACLE_HOME/network/admin

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

text 复制代码
#主库
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 传输密码文件

bash 复制代码
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 日志备库创建目录

bash 复制代码
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

sql 复制代码
startup nomount

2.9 复制日志备库

bash 复制代码
rman target sys/oracle@dbaas auxiliary sys/oracle@dbarch
sql 复制代码
duplicate target database for farsync from active database;

2.9 开启db_broker

主备数据库均执行:

sql 复制代码
alter system set dg_broker_start=true;

2.10 创建DG配置

bash 复制代码
dgmgrl sys/oracle@dbaas
sql 复制代码
create configuration 'dbdg' as primary database is dbaas connect identifier is dbaas;
add far_sync dbarch as connect identifier is dbarch;
enable configuration;

3 检查Far Sync

3.1 DG配置

sql 复制代码
show configuration
show database dbaas
show far_sync dbarch

3.2 备库文件

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

3.3 切换日志测试

主库切换日志:

sql 复制代码
alter system switch logfile;

备库正常生成新的归档日志。

至此DG Far Sync日志备库搭建完成,同步工具可以从日志备库解析日志。

注意:

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

总结

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

老规矩,知道写了些啥。

相关推荐
tyatyatya5 分钟前
MySQL Group Replication(MGR)集群部署,实现自动故障切换
数据库·mysql
b***59435 分钟前
mysql 迁移达梦数据库出现的 sql 语法问题 以及迁移方案
数据库·sql·mysql
木风小助理5 分钟前
MySQL中COUNT()、COUNT(1)与COUNT
数据库
不想上班的小吕6 分钟前
采购申请创建(BAPI_PR_CREATE/BAPI_REQUISITION_CREATE)
java·服务器·数据库
j***89467 分钟前
MySQL官网驱动下载(jar包驱动和ODBC驱动)【详细教程】
数据库·mysql
emma羊羊9 分钟前
Vulhub-Mysql靶场
数据库·mysql
橘橙黄又青14 分钟前
mongodb的基本命令
数据库·mongodb
AC赳赳老秦17 分钟前
量化交易脚本开发:DeepSeek生成技术指标计算与信号触发代码
数据库·elasticsearch·信息可视化·流程图·数据库架构·memcached·deepseek
何中应20 分钟前
Redis的两个小错误
数据库·redis·缓存
Dovis(誓平步青云)35 分钟前
《Linux 核心 IO 模型深析(中篇):探索Cmake与多路转接的高效实现poll》
linux·运维·服务器·数据库·csdn成长记录