当前位置:   article > 正文

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

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

数据库管理-第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:

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
  • 1
  • 2
  • 3

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

srvctl modify service -db dbaas -service tac_srv -modifyconfig -role primary
  • 1

2 连接配置

2.1 TNS

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

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)))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

2.2 JDBC

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')))
  • 1

如果仅是支持单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依赖即可,如:

<dependency>
  <groupId>com.oracle.database.jdbc</groupId>
  <artifactId>ojdbc8-production</artifactId>
  <version>19.20.0.0</version>
  <type>pom</type>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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
  • 1

或者

spring.datasource.oracleucp.connection-properties.oracle.jdbc.implicitStatementCacheSize=200
  • 1

会话保持机制除了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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

总结

本期讲解了在RAC+ADG环境下使用TAC的数据库端与应用端的配置。
老规矩,知道写了些啥。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/844288
推荐阅读
相关标签
  

闽ICP备14008679号