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

来源:这里教程网 时间:2026-03-03 23:05:02 作者:

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

作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database
PostgreSQL ACE
10年数据库行业经验
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP,ITPUB认证专家
圈内拥有“总监”称号,非著 名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸
CSDN:胖头鱼的鱼缸(尹海文)
墨天轮:胖头鱼的鱼缸
ITPUB:yhw1809
IFClub:胖头鱼的鱼缸
除授权转载并标明出处外,均为“非法”抄袭

914fcc7ad57defa7868c3be1ca7fb4f5.jpg

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

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

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

1 RAC下同步数据的痛点

首先我们看看Oracle Exadata下,ASM实例的PGA与SGA配置: 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 这里省略数据库软件与建库流程(已开启归档),Far Sync备库还需要通过netca创建监听(省略)。这里其实就是要模拟主库与日志备库下面参数的一些差异: image.png

    2.1 主库配置

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

    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 生成参数文件并传输至日志备库

    create pfile='/home/oracle/initdbarch.ora' from spfile;
    scp /home/oracle/initdbarch.ora db02:~

    2.3 备库修改配置文件

    编辑initdbarch.ora:

    #删除/修改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:

    create spfile from pfile='/home/oracle/initdbarch.ora';

    2.4 配置备库静态监听

    cd $ORACLE_HOME/network/admin

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

    SID_LIST_LISTENER=
      (SID_LIST=
          (SID_DESC=
             (GLOBAL_DBNAME=dbarch)
             (SID_NAME=dbarch                     
             (ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1)
          )
      )
    lsnrctl reload

    image.png

    2.5 主备库配置本地命名

    cd $ORACLE_HOME/network/admin

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

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

    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 日志备库创建目录

    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

    startup nomount

    image.png

    2.9 复制日志备库

    rman target sys/oracle@dbaas auxiliary sys/oracle@dbarch
    duplicate target database for farsync from active database;

    image.png

    2.9 开启db_broker

    主备数据库均执行:

    alter system set dg_broker_start=true;

    2.10 创建DG配置

    dgmgrl sys/oracle@dbaas
    create configuration 'dbdg' as primary database is dbaas connect identifier is dbaas;
    add far_sync dbarch as connect identifier is dbarch;
    enable configuration;

    image.png

    3 检查Far Sync

    3.1 DG配置

    show configuration
    show database dbaas
    show far_sync dbarch

    image.png

    3.2 备库文件

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

    3.3 切换日志测试

    主库切换日志:

    alter system switch logfile;

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

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

    总结

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

  • 相关推荐

    热文推荐