百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

通过触发器实现dataguard的服务切换实现客户端的高可用连接

mhr18 2024-10-16 10:13 23 浏览 0 评论

前面几篇文章主要写的是rac-rac的dg环境下的服务切换,同样适用于由grid管理的数据库(rac onenode或oracle restart)。那么如果是单纯的数据库(没有grid)情况下的dg如何实现基于角色的服务切换呢?

参考了一些专家的文档,可以通过触发器的方式进行服务名的切换实现客户端的高可用连接。(触发器的操作同样适用于rac或者grid管理的数据库环境)。

正常状态

1)在主库上配置一个TAF的service(服务名称service_pri)

此服务在数据库出现故障时会发送通知给客户端,允许查询语句在故障转移发生后继续运行。相关参数说明自行查看官方文档

begin
DBMS_SERVICE.CREATE_SERVICE(
service_name => 'SERVICE_PRI',
network_name => 'SERVICE_PRI',
aq_ha_notifications => TRUE,
failover_method => 'BASIC',
failover_type => 'SELECT',
failover_retries => 15,
failover_delay => 5);
end;
/

2)创建在主库启动服务的存储过程

创建一个存储过程来实现此目的,如果当前数据库是主库它就启动此服务,如果是备库就停止。

主库执行:

create or replace procedure SERVICE_PRI is
v_role VARCHAR(30);
begin
select DATABASE_ROLE into v_role from V$DATABASE;
if v_role = 'PRIMARY' then
DBMS_SERVICE.START_SERVICE('SERVICE_PRI');
else
DBMS_SERVICE.STOP_SERVICE('SERVICE_PRI');
end if;
end;
/

3)创建一个触发器来确保服务运行

创建触发器,让数据库在启动或角色转换时运行此存储过程。用于当数据库open时,不需要重启数据库,如果是主库则执行存储过程。当数据库切换后,如果是主库则执行存储过程。

主库执行:

create or replace TRIGGER FSFO_TRIGGER
after startup or db_role_change on database
begin
SERVICE_PRI;
end;
/

4)启动新创建的service

在主库上执行该存储过程(或者重启数据库,在启动数据库时会触发执行触发器),在主库做日志的切换,将变化应用到备库。

主库执行:

SQL> exec SERVICE_PRI;
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.01

主库的service pri服务已启动

从库并未启动对应的服务

客户端配置

客户端配置
#service_pri
service_pri =
    (DESCRIPTION =
        (ADDRESS = (PROTOCOL = tcp)(HOST = 1xxxxxx9)(PORT = 1521))  #主库地址
        (ADDRESS = (PROTOCOL = tcp)(HOST = 1xxxxxx44)(PORT = 1521))  #从库地址
            (LOAD_BALANCE = off)
            (FAILOVER = on)
                (CONNECT_DATA =
                    (SERVER = DEDICATED)
                    (SERVICE_NAME = service_pri)
                (FAILOVER_MODE =
                    (TYPE = select)
                    (METHOD = basic)
                    (RETRIES = 180)
                    (DELAY = 5)
               )
        )
 )

切换测试

通过service_pri连接数据库模拟写入

执行切换(gadb-gadbstd)

执行切换动作
DGMGRL> validate database gadbstd

  Database Role:     Physical standby database
  Primary Database:  gadb

  Ready for Switchover:  Yes
  Ready for Failover:    Yes (Primary Running)

  Flashback Database Status:
    gadb   :  Off
    gadbstd:  Off

  Managed by Clusterware:
    gadb   :  YES            
    gadbstd:  YES            

DGMGRL> switchover to gadbstd
Performing switchover NOW, please wait...
Operation requires a connection to database "gadbstd"
Connecting ...
Connected to "gadbstd"
Connected as SYSDBA.
New primary database "gadbstd" is opening...
Oracle Clusterware is restarting database "gadb" ...
Connected to "gadb"
Connected to "gadb"
Switchover succeeded, new primary is "gadbstd"

切换完毕后服务已经在新主库启动

同时写入进程在切换过程中中断,当切换完毕后恢复写入操作。

切换后状态

综上测试,如果环境无法通过srvctl命令创建的服务,那么通过数据库里面创建对应的触发器即存储过程也可以实现应用在dataguard发生切换后的高可用连接。

相关推荐

Spring Boot 分布式事务实现简单得超乎想象

环境:SpringBoot2.7.18+Atomikos4.x+MySQL5.71.简介关于什么是分布式事务,本文不做介绍。有需要了解的自行查找相关的资料。本篇文章将基于SpringBoot...

Qt编写可视化大屏电子看板系统15-曲线面积图

##一、前言曲线面积图其实就是在曲线图上增加了颜色填充,单纯的曲线可能就只有线条以及数据点,面积图则需要从坐标轴的左下角和右下角联合曲线形成完整的封闭区域路径,然后对这个路径进行颜色填充,为了更美观...

Doris大数据AI可视化管理工具SelectDB Studio重磅发布!

一、初识SelectDBStudioSelectDBStudio是专为ApacheDoris湖仓一体典型场景实战及其兼容数据库量身打造的GUI工具,简化数据开发与管理。二、Select...

RAD Studio 、Delphi或C++Builder设计代码编译上线缩短开发时间

#春日生活打卡季#本月,Embarcadero宣布RADStudio12.3Athens以及Delphi12.3和C++Builder12.3,提供下载。RADStudio12.3A...

Mybatis Plus框架学习指南-第三节内容

自动填充字段基本概念MyBatis-Plus提供了一个便捷的自动填充功能,用于在插入或更新数据时自动填充某些字段,如创建时间、更新时间等。原理自动填充功能通过实现com.baomidou.myba...

「数据库」Sysbench 数据库压力测试工具

sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。目前支持的数据库有MySQL、Oracle和PostgreSQL。以...

如何选择适合公司的ERP(选erp系统的经验之谈)

很多中小公司想搞ERP,但不得要领。上ERP的目的都是歪的,如提高效率,减少人员,堵住财务漏洞等等。真正用ERP的目的是借机提升企业管理能力,找出管理上的问题并解决,使企业管理更规范以及标准化。上ER...

Manus放开注册,但Flowith才是Agent领域真正的yyds

大家好,我是运营黑客。前天,AIAgent领域的当红炸子鸡—Manus宣布全面放开注册,终于,不需要邀请码就能体验了。于是,赶紧找了个小号去确认一下。然后,额……就被墙在了外面。官方解释:中文版...

歌浓酒庄总酿酒师:我们有最好的葡萄园和最棒的酿酒师

中新网1月23日电1月18日,张裕董事长周洪江及总经理孙健一行在澳大利亚阿德莱德,完成了歌浓酒庄股权交割签约仪式,这也意味着张裕全球布局基本成型。歌浓:澳大利亚年度最佳酒庄据悉,此次张裕收购的...

软件测试进阶之自动化测试——python+appium实例

扼要:1、了解python+appium进行APP的自动化测试实例;2、能根据实例进行实训操作;本课程主要讲述用python+appium对APP进行UI自动化测试的例子。appium支持Androi...

为什么说Python是最伟大的语言?看图就知道了

来源:麦叔编程作者:麦叔测试一下你的分析能力,直接上图,自己判断一下为什么Python是最好的语言?1.有图有真相Java之父-JamesGoshlingC++之父-BjarneStrou...

如何在Eclipse中配置Python开发环境?

Eclipse是著名的跨平台集成开发环境(IDE),最初主要用来Java语言开发。但是我们通过安装不同的插件Eclipse可以支持不同的计算机语言。比如说,我们可以通过安装PyDev插件,使Eclip...

联合国岗位上新啦(联合国的岗位)

联合国人权事务高级专员办事处PostingTitleIntern-HumanRightsDutyStationBANGKOKDeadlineOct7,2025CategoryandL...

一周安全漫谈丨工信部:拟定超1亿条一般数据泄露属后果严重情节

工信部:拟定超1亿条一般数据泄露属后果严重情节11月23日,工信部官网公布《工业和信息化领域数据安全行政处罚裁量指引(试行)(征求意见稿)》。《裁量指引》征求意见稿明确了行政处罚由违法行为发生地管辖、...

oracle列转行以及C#执行语句时报错问题

oracle列转行的关键字:UNPIVOT,经常查到的怎么样转一列,多列怎么转呢,直接上代码(sshwomeyourcode):SELECTsee_no,diag_no,diag_code,...

取消回复欢迎 发表评论: