ITPub博客

首页 > 数据库 > Oracle > Oracle 19C Active Data Guard DML Redirection

Oracle 19C Active Data Guard DML Redirection

原创 Oracle 作者:jason_yehua 时间:2025-03-06 14:06:01 0 删除 编辑

环境准备

    • 主库: PRIMARY_DB(主机: primary_host,服务名: primary_svc)

    • 备库: STANDBY_DB(主机: standby_host,服务名: standby_svc)

  • Oracle 19C ADG需要提前搭建同时处于正常同步状态,搭建过程不做展示。

步骤1:在主库和备库上配置服务

通过 DBMS_SERVICE包创建专用服务,用于DML重定向。

        在主库执行:

BEGIN
  DBMS_SERVICE.CREATE_SERVICE(
    service_name => 'dml_redirect_svc',
    network_name => 'dml_redirect_svc',
    aq_ha_notifications => TRUE,
    failover_method => 'BASIC',
    failover_type => 'TRANSACTION',
    failover_retries => 5,
    failover_delay => 5
  );
END;
/

        在备库执行:

BEGIN
  DBMS_SERVICE.CREATE_SERVICE(
    service_name => 'dml_redirect_svc',
    network_name => 'dml_redirect_svc',
    aq_ha_notifications => TRUE,
    failover_method => 'BASIC',
    failover_type => 'TRANSACTION',
    failover_retries => 5,
    failover_delay => 5
  );
END;
/

步骤2:配置客户端TNS别名

在客户端的 tnsnames.ora中添加以下条目,配置故障转移逻辑:

DML_REDIRECT =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (LOAD_BALANCE = ON)
      (ADDRESS = (PROTOCOL = TCP)(HOST = standby_host)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = primary_host)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = dml_redirect_svc)
      (FAILOVER_MODE =
        (TYPE = SELECT)       # 故障转移类型为SELECT(会话级)
        (METHOD = BASIC)      # 基本故障转移方法
        (RETRIES = 180)       # 最多重试180次
        (DELAY = 5)           # 每次重试间隔5秒
      )
    )
  )

步骤3:验证服务状态

在主库和备库上启动服务并检查状态:

-- 在主库启动服务
ALTER SYSTEM SET SERVICE_NAMES='primary_svc,dml_redirect_svc';
-- 在备库启动服务
ALTER SYSTEM SET SERVICE_NAMES='standby_svc,dml_redirect_svc';

使用以下命令检查服务注册状态:

SELECT INST_ID, NAME, NETWORK_NAME, GOAL, CLB_GOAL, ENABLED 
FROM GV$SERVICES 
WHERE NAME = 'dml_redirect_svc';

步骤4:测试DML重定向

1. 应用连接测试 :

sqlplus user/password@DML_REDIRECT
  • 默认优先连接到备库( standby_host)。

2.执行SELECT操作 :

SELECT * FROM test_table;
  • 确认查询结果来自备库。

3. 执行DML操作 :

INSERT INTO test_table VALUES (1, 'test');
  • 备库因只读会抛出错误  ORA-16000: 数据库以只读模式打开。

  • 客户端根据 FAILOVER_MODE自动重试连接到主库,DML在主库成功执行。

4.验证数据同步 :

  • 主库提交后,ADG自动同步数据到备库。

  • 在备库执行查询,确认数据已同步。



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31547506/viewspace-3074985/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-05-22

  • 博文量
    122
  • 访问量
    99626