当前位置: 首页 > news >正文

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

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

  • 数据库管理-第221期 Oracle的高可用-04(20240717)
    • 1 ADG
    • 2 连接配置
      • 2.1 TNS
      • 2.2 JDBC
      • 2.3 JAVA连接池
      • 2.3.1 Oracle UCP
      • 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:

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 primarysrvctl start service -db dbdg -service tac_srv

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

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

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)))

如果仅是支持单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')))

如果仅是支持单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>

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=30secspring.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的数据库端与应用端的配置。
老规矩,知道写了些啥。

相关文章:

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

数据库管理221期 2024-07-17 数据库管理-第221期 Oracle的高可用-04&#xff08;20240717&#xff09;1 ADG2 连接配置2.1 TNS2.2 JDBC2.3 JAVA连接池2.3.1 Oracle UCP2.3.2 应用连接池基础配置 总结 数据库管理-第221期 Oracle的高可用-04&#xff08;20240717&#xff09; 作…...

navicat15已连接忘记密码

1.导出链接 2.使用文本打开 connections.ncx UserName"root" PasswordXXXX 3.复制加密密码&#xff0c;在线解密 代码在线运行 - 在线工具 php解密代码 <?php class NavicatPassword {protected $version 0;protected $aesKey libcckeylibcckey;protected…...

企业管理必备:学会寻找客户绝佳方法。

无论是日常沟通、工作交流&#xff0c;还是社交娱乐&#xff0c;微信都扮演着重要的角色。而在微信的使用过程中&#xff0c;添加好友是一项基本而重要的操作&#xff0c;但是您真的会添加微信好友吗&#xff1f; 试试这个神器——微信管理系统&#xff0c;下面分享它快速加客…...

昇思25天学习打卡营第29天 | 文本解码原理--以MindNLP为例

今天是29天&#xff0c;学习了文本解码原理--以MindNLP为例。 MindNLP 是一个基于 MindSpore 的开源自然语言处理&#xff08;NLP&#xff09;库。它具有以下特点&#xff1a; 支持多种 NLP 任务&#xff1a;如语言模型、机器翻译、问答、情感分析、序列标记、摘要等&#xff…...

元服务体验-服务发现

服务发现&#xff0c;无论线上或线下的方式都可以发现元服务。 线上&#xff1a;基于用户意图。从精准意图的搜索、用户事件触发的推荐到主动探索等场景。用户可以在设备的负一屏、全局搜索、应用市场、桌面等场景发现元服务。 线下&#xff1a;用户在 HarmonyOS Connect标签…...

设计模式学习(二)工厂模式——抽象工厂模式+注册表

设计模式学习&#xff08;二&#xff09;工厂模式——抽象工厂模式注册表 前言使用简单工厂改进使用注册表改进参考文章 前言 在上一篇文章中我们提到了抽象工厂模式初版代码的一些缺点&#xff1a;①客户端违反开闭原则②提供方违反开闭原则。本文将针对这两点进行讨论 使用…...

同三维T80004解码器视频使用操作说明书:高清HDMI解码器,高清SDI解码器,4K超清HDMI解码器,双路4K超高清解码器

同三维T80004解码器视频使用操作说明书&#xff1a;高清HDMI解码器&#xff0c;高清SDI解码器&#xff0c;4K超清HDMI解码器&#xff0c;双路4K超高清解码器 同三维T80004解码器系列视频使用操作说明书&#xff1a;高清HDMI解码器&#xff0c;高清SDI解码器&#xff0c;4K超清H…...

Flutter应用开发:掌握StatefulWidget的实用技巧

前言 随着移动应用的日益复杂&#xff0c;状态管理成为了 Flutter 应用开发中的一项重要挑战。 状态&#xff0c;即应用中的可变数据&#xff0c;它驱动着用户界面的渲染和交互。 在 Flutter 这样的声明式 UI 框架中&#xff0c;如何高效、可维护地管理状态&#xff0c;对于…...

SCADA系统在哪些行业中取得了不斐的成绩!

随着技术的发展&#xff0c;SCADA系统已经历了多代的发展。从基于专用计算机和专用操作系统的第一代SCADA系统&#xff0c;到基于通用计算机和通用操作系统的第二代&#xff0c;再到按照开放原则基于分布式计算机网络以及关系数据库技术的第三代&#xff0c;以及现在基于更高技…...

layui 监听弹窗关闭并刷新父级table

记录&#xff1a;easyadmin 监听弹窗关闭并刷新父级table 场景一&#xff1a;在二级页面的table中点击编辑&#xff0c;保存后刷新二级页面的table edit: function () {ea.listen(function (data) {return data;}, function (res) {ea.msg.success(res.msg, function () {var …...

Webpack详解

Webpack Webpack 是一个现代 JavaScript 应用程序的静态模块打包器&#xff08;module bundler&#xff09;。它允许开发者将项目中的资源&#xff08;如 JavaScript、CSS、图片等&#xff09;视为模块&#xff0c;通过分析和处理这些模块之间的依赖关系&#xff0c;将它们打包…...

杰发科技AC7801 —— __attribute__指定地址存储常量

const uint8_t usFlashInitVal[] __attribute__((at(0x08002800))) {0x55,0x55,0x55,0x55,0x55};//定位在flash中&#xff0c;0x00030000开始的6个字节信息固定 注意7801的地址在8000000之后 如地址选0x00000800烧录时候报错 不知道是不是atclinktool的bug&#xff0c;使用_…...

docker pull 不下来 还是走代理好啊

docker国内镜像源配置及走代理设置_docker 镜像代理-CSDN博客 docker命令走代理 实际测试下来&#xff0c;就算我们修改成功了国内的镜像源&#xff0c;有时候由于国内镜像更新不及时&#xff0c;或者需要拉取的镜像比较冷门&#xff0c;只有域外镜像站才有&#xff0c;那么我…...

Java Scanner 类

Scanner 类是 Java 中用于读取用户输入的方便工具&#xff0c;它可以从各种数据源&#xff08;如标准输入流、文件、字符串等&#xff09;中读取基本类型和字符串。Scanner 类位于 java.util 包中&#xff0c;通常用于从键盘获取用户输入数据。 ### 主要功能和用法 1. **创建…...

OceanBase:引领下一代分布式数据库技术的前沿

OceanBase的基本概念 定义和特点 OceanBase是一款由蚂蚁金服开发的分布式关系数据库系统&#xff0c;旨在提供高性能、高可用性和强一致性的数据库服务。它结合了关系数据库和分布式系统的优势&#xff0c;适用于大规模数据处理和高并发业务场景。其核心特点包括&#xff1a; …...

Win11鼠标卡顿 - 解决方案

问题 使用Win11系统使&#xff0c;鼠标点击任务栏的控制中心&#xff08;如下图&#xff09;时&#xff0c;鼠标会有3秒左右的卡顿&#xff0c;同时整个显示屏幕也有一定程度的卡顿。 问题原因 排除鼠标问题&#xff1a;更换过不同类型的鼠标&#xff0c;以及不同的连接方式…...

使用 ABBYY FineReader PDF 15 在创建或转换 PDF 时自动生成书签

使用 ABBYY 为 PDF 文件添加书签&#xff0c;可以帮助快速定位文档中的主要内容&#xff0c;也能更方便的梳理出一份文档大纲。 有很多 PDF 文件在创建时并没有编辑书签&#xff0c;这里介绍使用 ABBYY FineReader PDF 15&#xff08;Win 系统&#xff09;在 PDF 中自动添加书…...

k8s集群新增节点

目前集群状态 如K8S 集群搭建中规划的集群一样 Masternode01node02IP192.168.100.100192.168.100.101192.168.100.102OSCent OS 7.9Cent OS 7.9Cent OS 7.9 目前打算新增节点node03 Masternode01node02node03IP192.168.100.100192.168.100.101192.168.100.102192.168.100.1…...

springAMQP自定义fanout交换机进行消息的广播

rabbitmq一共有三种交换机&#xff1a; fanout--广播direct--定向topic--话题 rabbitmq-web端 首先我们需要建立一个名叫cybg.fanout交换机与两个自定义的队列用于测试广播效果 我这里就起名字叫做fanout_queue1&fanout_queue2 项目中&#xff1a; 首先对我们的Liste…...

Nginx配置缺少导致CSS不起作用

引言 在Web开发中&#xff0c;确保样式表正确加载是前端显示正常工作的关键。然而&#xff0c;有时候即使CSS文件的路径和代码本身没有问题&#xff0c;CSS样式也可能无法正确应用。本文将分享一个常见的问题——Nginx配置缺少导致的CSS不起作用&#xff0c;以及如何解决这个问…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...

React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构

React 实战项目&#xff1a;微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇&#xff01;在前 29 篇文章中&#xff0c;我们从 React 的基础概念逐步深入到高级技巧&#xff0c;涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...

6.9-QT模拟计算器

源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...