前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过JDBC让应用能体验到Oracle高可用的"红利"

通过JDBC让应用能体验到Oracle高可用的"红利"

作者头像
bisal
发布2022-12-01 15:33:31
4020
发布2022-12-01 15:33:31
举报
文章被收录于专栏:bisal的个人杂货铺

通过JDBC连接Oracle数据库,可以采用三种拼接的形式,

(1)使用SID,jdbc:oracle:thin:@host:port:SID,例如

代码语言:javascript
复制
jdbc:oracle:thin:@localhost:1521:orcl

(2)使用Service Name,jdbc:oracle:thin:@//host:port/service_name,例如,

代码语言:javascript
复制
jdbc:oracle:thin:@//localhost:1521/orcl.oracle

其中,@后面有"//",port跟着的":"换成了"/",这是Oracle推荐的格式,因为对于集群来说,每个节点的SID是不一样的,但是service_name可以包含所有节点。

(3)使用TNSName,jdbc:oracle:thin:@TNSName,此处的TNSName指的是tnsnames.ora中的配置名称,当然还可以将tnsnames.ora中的内容直接加到此处,例如,

代码语言:javascript
复制
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=x.x.x.x)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)))

最近一位朋友,说他们的应用,要配合DBA做一次应急演练,具体内容是Oracle DG主备的切换。

应用中是写了如下的配置,其中IP是主库的IP(不是VIP、SCAN IP),所以如果DG切了,应用必须将IP改成新的备库IP,才可以继续使用,

代码语言:javascript
复制
jdbc:oracle:thin:@//IP:1521/orcl

这种情况下,数据库是做到了高可用,但是应用的高可用不是自动的,存在着隐患,没用到Oracle提供的高可用便利。

此时应该用上述提到的TNSName方式进行配置,而且按照RAC+DG的标准,可以采用如下tnsnames.ora,可以看到,主备库的RAC关闭了load balance,即采用了failover,而DG打开了failover。由于配置了所有主备库的IP以及具体切换的方式,原则上数据库做了主备切换,应用就可以自动进行主备库的选择,实现了更加纯粹的高可用。实际用的时候,jdbc的配置直接将如下这段写到一行中,

代码语言:javascript
复制
orcl=
  (DESCRIPTION_LIST=
    (LOAD_BALANCE=off)
    (FAILOVER=on)
    (DESCRIPTION=
      (CONNECT_TIMEOUT=5)
      (TRANSPORT_CONNECT_TIMEOUT=3)
      (RETRY_COUNT=3)
      (ADDRESS_LIST=
        (LOAD_BALANCE=off)
        (ADDRESS=(PROTOCOL=TCP)(HOST=x.x.x.1)(PORT=1523))
        (ADDRESS=(PROTOCOL=TCP)(HOST=x.x.x.2)(PORT=1523))
        (ADDRESS=(PROTOCOL=TCP)(HOST=x.x.x.3)(PORT=1523))
       ) (CONNECT_DATA=(SERVICE_NAME=test)))
    (DESCRIPTION=
      (CONNECT_TIMEOUT=5)
      (TRANSPORT_CONNECT_TIMEOUT=3)
      (RETRY_COUNT=3)
      (ADDRESS_LIST=
        (LOAD_BALANCE=off)
        (ADDRESS=(PROTOCOL=TCP)(HOST=x.x.x.4)(PORT=1523))
        (ADDRESS=(PROTOCOL=TCP)(HOST=x.x.x.5)(PORT=1523))
        (ADDRESS=(PROTOCOL=TCP)(HOST=x.x.x.6)(PORT=1523))
       ) (CONNECT_DATA=(SERVICE_NAME=test))))

其实这个问题,还是比较有代表性的,就是有时候,技术上提供了我们很多种实现途径,但我们可能不了解这些,导致没能用到技术上的"红利"。因此,无论什么技术,还是不能仅局限于表象,不一定都做到很精通,但至少能知道技术可以提供我们什么功能,具体细节上,可以用到的时候能有途径学习了解,这是最基础的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档