Oracle DG发生主备切换后,外围系统如何自动连接新的主库

         如果一个应用系统使用Oracle DG作为数据库容灾方案,当主库发生故障并执行主备切换后,由于连接信息的改变,除了本系统应用连接数据库的配置需要调整,也需要通知有数据库调用关系的三方外围系统进行相应的数据库连接配置调整。

        由于不同系统有着不同的负责主体,当某个系统数据库发生主备切换后,在实践中经常会出现调整数据库连接配置的通知和响应不及时,从而导致需要实时接口调用的外围系统调用接口失败,甚至导致系统间接口数据丢失或数据不一致的问题,后续需要花费大量精力来修复数据;

        针对这个问题,我们其实可以通过触发器自动创建基于数据库主备角色的监听服务名,并将外围系统连接数据的信息调整为主库服务名来解决。每当进行主备切换的时候自动在新的主库上启动主库服务名监听,外围系统一次调整后连接信息后无需任何干预自动连接到新的主库上。

        以上过程我们三个步骤即可实现:

1、创建主库服务名

sql> exec dbms_service.create_service('prim_db','prim_db');

2、创建触发器

sql> CREATE OR REPLACE TRIGGER startDgServices after startup on database

DECLARE

  db_role VARCHAR(30);

  db_open_mode VARCHAR(30);

BEGIN

  SELECT DATABASE_ROLE, OPEN_MODE INTO db_role, db_open_mode FROM V$DATABASE;

  IF db_role = 'PRIMARY' THEN DBMS_SERVICE.START_SERVICE('prim_db'); END IF;

  IF db_role = 'PHYSICAL STANDBY' AND db_open_mode LIKE 'READ ONLY%' THEN DBMS_SERVICE.START_SERVICE('stby_db'); END IF;

END;

/

3、调整外围系统数据库连接信息

TNS连接示例:

prim_db=

        (DESCRIPTION=

            (ADDRESS_LIST=

                (LOAD_BALANCE=NO)

                (FAILOVER=YES)

                (ADDRESS=(PROTOCOL=tcp)(HOST=主库IP)(PORT=1521))

                (ADDRESS=(PROTOCOL=tcp)(HOST=备库IP)(PORT=1521))

            )

            (CONNECT_DATA=

                (SERVICE_NAME=prim_db)

            )

        )

JDBC连接示例:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=OFF)(FAILOVER=ON)

(ADDRESS=(PROTOCOL=TCP)(HOST=主库IP)(PORT=1521))

(ADDRESS=(PROTOCOL=TCP)(HOST=备库IP)(PORT=1521)))

(CONNECT_DATA=(SERVICE_NAME=prim_db)(SERVER=DEDICATED)))

  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值