数据库管理-第221期 Oracle的高可用-04(20240717)

数据库管理221期 2024-07-17

  • [数据库管理-第221期 Oracle的高可用-04(20240717)](#数据库管理-第221期 Oracle的高可用-04(20240717))
    • [1 ADG](#1 ADG)
    • [2 连接配置](#2 连接配置)
      • [2.1 TNS](#2.1 TNS)
      • [2.2 JDBC](#2.2 JDBC)
      • [2.3 JAVA连接池](#2.3 JAVA连接池)
      • [2.3.1 Oracle UCP](#2.3.1 Oracle UCP)
      • [2.3.2 应用连接池基础配置](#2.3.2 应用连接池基础配置)
    • 总结

数据库管理-第221期 Oracle的高可用-04(20240717)

作者:胖头鱼的鱼缸(尹海文)

Oracle ACE Pro: Database(Oracle与MySQL)

PostgreSQL ACE Partner

10年数据库行业经验,现主要从事数据库服务工作

拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证

墨天轮MVP、年度墨力之星,ITPUB认证专家、专家百人团成员,OCM讲师,PolarDB开源社区技术顾问,HaloDB外聘技术顾问,OceanBase观察团成员,青学会MOP技术社区(青年数据库学习互助会)技术顾问

圈内拥有"总监"、"保安"、"国产数据库最大敌人"等称号,非著名社恐(社交恐怖分子)

公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。

除授权转载并标明出处外,均为"非法"抄袭

上一期讲解了如何在RAC中配置支持TAC的服务,本期讲解如何在服务侧配置支持TAC的连接。

1 ADG

TAC不仅支持RAC内节点异常会话不中断,在ADG环境主备切换时也能确保增删查改不中断,需要在备库添加与主库类似的服务,这里将数据库名称和实例名前缀调整为dbdg:

bash 复制代码
srvctl add service -db dbdg -pdb PDB1 -service tac_srv -preferred dbdg1,dbdg2 -available dbdg3,dbdg4 -failover_restore AUTO -failoverretry 30 -failoverdelay 10 -commit_outcome TRUE -failovertype AUTO -replay_init_time 1800 -retention 86400 -notification TRUE -drain_timeout 300 -stopoption IMMEDIATE -role primary

srvctl start service -db dbdg -service tac_srv

这里建议在备库制定-role参数来确保数据库在切换为primary角色后能正常启动服务,如需支持读写分离可以分别在主备库一个-role指定为physical standby的服务。主库也建议进行相同配置:

bash 复制代码
srvctl modify service -db dbaas -service tac_srv -modifyconfig -role primary

2 连接配置

2.1 TNS

可以使用tnsname来实现支持TAC的连接访问。

bash 复制代码
tac_srv=
(DESCRIPTION=
   (CONNECT_TIMEOUT=120) (RETRY_COUNT=20)(RETRY_DELAY=3)(TRANSPORT_CONNECT_TIMEOUT=3)
   (ADDRESS_LIST=
      (LOAD_BALANCE=on)
      (ADDRESS=(PROTOCOL=TCP)(HOST=primary-scan)(PORT=1521)))
   (ADDRESS_LIST=
      (LOAD_BALANCE=on)
      (ADDRESS=(PROTOCOL=TCP)(HOST=standby-scan)(PORT=1521)))      
   (CONNECT_DATA=(SERVICE_NAME=TAC_SRV)))

如果仅是支持单RAC内TAC,仅需添加一个ADDRESS_LIST即可。

2.2 JDBC

bash 复制代码
url=jdbc:oracle:thin:@(DESCRIPTION=(CONNECT_TIMEOUT=120)(RETRY_COUNT=20)(RETRY_DELAY=3)(TRANSPORT_CONNECT_TIMEOUT=3)(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=primary-scan)(PORT=1521)))(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=standby-scan)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME='TAC_SRV')))

如果仅是支持单RAC内TAC,仅需添加一个ADDRESS_LIST即可。

2.3 JAVA连接池

2.3.1 Oracle UCP

Java应用中使用TAC,首选Oracle UCP。UCP 无缝集成 Oracle 数据库集群,应用端使用UCP能获得其它连接池无法实现的一些好处,如支持 TAC,支持连接池快速排干以及连接快速恢复(FCF,Fast Connection Failover),动态连接负载均衡(RCLB,Runtime Connection Load Balancing)等。

应用端引入UCP依赖比较简单,如果用maven的话,pom文件中增加ojdbc8依赖即可,如:

bash 复制代码
<dependency>
  <groupId>com.oracle.database.jdbc</groupId>
  <artifactId>ojdbc8-production</artifactId>
  <version>19.20.0.0</version>
  <type>pom</type>
</dependency>

2.3.2 应用连接池基础配置

以Spring Boot为例,v2.4.0及以上版本的配置属性已经原生支持了Oracle UCP,因此,跟配置其它连接池一样,只需要在Spring Boot配置文件中指定即可,无需任何代码端变动:

spring.datasource.url=jdbc:oracle:thin:@(DESCRIPTION=(FAILOVER=on)(LOAD_BALANCE=off)(TRANSPORT_CONNECT_TIMEOUT=5)(RETRY_COUNT=20)(RETRY_DELAY=3)(ADDRESS_LIST=(LOAD_BALAN CE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=primary-scan)(PORT=1521)))(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=standby-scan)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME='TAC_SRV')))

spring.datasource.username=db_user

spring.datasource.password=xxxxxx

spring.datasource.type=oracle.ucp.jdbc.PoolDataSource

spring.datasource.oracleucp.connection-pool-name=pool-ncmsobs

spring.datasource.oracleucp.connection-factory-class-name=oracle.jdbc.replay.OracleDataSourceImpl

spring.datasource.oracleucp.fast-connection-failover-enabled=true

spring.datasource.oracleucp.initial-pool-size=30

spring.datasource.oracleucp.min-pool-size=30

spring.datasource.oracleucp.max-pool-size=200

......

如果是用Spring Boot v2.4.0以下的老版本(如2.1.x),配置也很简单,只需新增一个configuration Bean,指向配置文件中的UCP配置段即可,如:

@Configuration

public class UCPDataSource {

 @Bean("ncmsobs")

 @Primary

 @ConfigurationProperties("spring.datasource.oracleucp ") //指向配置文件中的 UCP 配置段

 public DataSourceds_ncmsobs() {

  return PoolDataSourceFactory.getPoolDataSource();

 }

}

使用UCP还可以指定JDBC的语句缓存(Statement Cache):

复制代码
spring.datasource.oracleucp.max-statements=200

或者

复制代码
spring.datasource.oracleucp.connection-properties.oracle.jdbc.implicitStatementCacheSize=200

会话保持机制除了JDBC连接中的配置,还有:

复制代码
spring.datasource.oracleucp.connection-properties.oracle.jdbc.ReadTimeout=30sec

spring.datasource.oracleucp.connection-properties.oracle.net.keepAlive=true
spring.datasource.oracleucp.connection-properties.oracle.net.TCP_KEEPIDLE=60
spring.datasource.oracleucp.connection-properties.oracle.net.TCP_KEEPINTERVAL=5
spring.datasource.oracleucp.connection-properties.oracle.net.TCP_KEEPCOUNT=3

总结

本期讲解了在RAC+ADG环境下使用TAC的数据库端与应用端的配置。

老规矩,知道写了些啥。

相关推荐
小陈phd1 分钟前
Text2SQL智能体学习笔记(二)——NL2SQL落地的隐形基石:元数据库
数据库·笔记·学习
霸道流氓气质2 分钟前
阿里云 OSS 从零到实战:概念、配置与 Spring Boot 集成指南
数据库·spring boot·阿里云
茉莉玫瑰花茶3 分钟前
综合案例 - AI 智能租房助手 [ 4 ]
数据库·python·ai·langgraph
ULIi096kr5 分钟前
MySQL查看表创建时间、修改时间、最后更新时间(精准排查僵尸表)
数据库·mysql
折哥的程序人生 · 物流技术专研18 分钟前
Tomcat 严重警告:JDBC 驱动未注销 + 工作线程泄漏 —— 原因、影响与彻底修复(生产级终极指南)
java·运维·数据库·mysql·oracle·tomcat
初圣魔门首席弟子23 分钟前
Qt C++ 项目实战:修改共享头文件后的高效增量编译与快速发布流程
数据库
wb0430720124 分钟前
仓库搬家不停业——从阿明的“在线换仓库“,看数据库迁移与 Schema 演进的实战方法论
数据库·adb·架构
lx1885486989628 分钟前
Redis大Key阻塞:单线程CPU100%的致命陷阱
数据库·redis·缓存
IT策士31 分钟前
Redis 从入门到精通:位图、HyperLogLog、GEO
数据库·redis·缓存
IT策士1 小时前
Redis 从入门到精通:Python 操作 Redis 进阶
数据库·redis·python