问题描述
生产上线系统,未能及时识别到Oracle数据库是RAC环境,上线时,Druid数据源配置按照单实例数据库配置,导致系统无法建立数据库连接,系统无法启动。
补充说明:数据连接池使用的是Alibaba的Druid
。
临时解决方案
将原有数据库整库导出,在备机上创建单实例数据库,将生产库导入备机,之后启动系统,正常运行。
一个原则:保证业务能够正常实施!
最终解决方案
按照真实环境部署一套Rac测试环境,修改jdbc.url
进行测试!
普通配置:
jdbc.url=jdbc\:oracle\:thin\:@127.0.0.1\:1521\:svr_name
RAC下的
url
配置:
jdbc.url=jdbc\:oracle\:thin\:@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = host_ip1)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = host_ip2)(PORT = 1521)) (LOAD_BALANCE = yes)(failover=on)(connect_data= (service_name = oratest)))
其中:
host_ip1
、host_ip2
为你的rac数据库的两个甚至多个节点的ip地址(据说配置到/etc/hosts
下也可以为服务id)
service_name
为你的数据库实例名
RAC特性
RAC 同时具备HA(High Availiablity)
和LB(LoadBalance)
,而其高可用性的基础就是Failover
(故障转移).。它指集群中任何一个节点的故障都不会影响用户的使用,连接到故障节点的用户会被自动转移到健康节点,从用户感受而言, 是感觉不到这种切换。
Oracle 10g RAC 的Failover
可以分为3种:
- Client-Side Connect time Failover
- TAF
- Service-Side TAF
Client-Side Connect time Failover
第一种Client-Side Connect time Failover
的特点:只在建立连接那一时刻起作用。也就是说,这种Failover方式只在发起连接时才会去感知节点故障,如果节点没有反应,则自动尝试地址列表中的下一个地址。一旦连接建立之后,节点出现故障都不会做处理,从客户端的表现就是会话断开了,用户程序必须重新建立连接。启用这种Failover的方法就是在客户端的tnsnames.ora
中添加FAILOVER=ON
条目,这个参数默认就是ON,所以即使不添加这个条目,客户端也会获得这种Failover能力。
TAF
第二种TAF
的特点:建立连接以后,应用系统运行过程中,如果某个实例发生故障,连接到这个实例上的用户会被自动迁移到其他的健康实例上。对于应用程序而言,这个迁移过程是透明的,不需要用户的介入,当然,这种透明要是有引导的,因为用户的未提交事务会回滚。 相对于Client-Side Connect Time Failover
的用户程序中断,抛出连接错误,用户必须重启应用程序,TAF 这种方式在提高HA上有了很大的进步。
启用方式
只需要在客户端的tnsnames.ora
中添加FAILOVER_MODE
配置项。
1. METHOD: 用户定义何时创建到其实例的连接,有BASIC 和 PRECONNECT 两种可选值。
BASIC: 是指在感知到节点故障时才创建到其他实例的连接。
PRECONNECT: 是在最初建立连接时就同时建立到所有实例的连接,当发生故障时,立刻就可以切换到其他链路上。
两种方法比较: BASIC方式在Failover时会有时间延迟,PRECONNECT方式虽然没有时间延迟,但是建立多个冗余连接会消耗更多资源,两者就是是用时间换资源和用资源换时间的区别。
2. TYPE: 用于定义发生故障时对完成的SQL 语句如何处理,其中有2种类型:session
和select
.
这2种方式对于未提交的事务都会自动回滚,区别之处在于对select 语句的处理:
对于select,用户正在执行的select语句会被转移到新的实例上,在新的节点上继续返回后续结果集,而已经返回的记录集则抛弃。假设用户正在节点1上执行查询,整个结果集共有100条记录,现在已从节点1上返回10条记录,这时节点1宕机,用户连接被转移到节点2上,继续返回剩下的90条记录,而已经从节点1返回的10条记录不会重复返回给用户,对于用户而言,感受不到这种切换。
=====
如果是session模式,则需要重新执行查询语句。
显然为了实现select 方式,Oracle 必须为每个session保存更多的内容,包括游标,用户上下文等,需要更多的资源也是用资源换时间的方案。
3. DELAY 和 RETRIES: 这2个参数分别代表重试间隔时间和重试次数。
示例:
( FAILOVER_MODE= (TYPE=session) (METHOD=basic) (RETRIES=180) (DELAY=5) )
Service-SideTAF
Service-SideTAF可以看作是TAF的一种变种,首先Service-SideTAF也是TAF,所有TAF的特点它都有,其次这种TAF是在服务器上配置的,而不像TAF是在客户端配置的。
引用
--------------------- 作者:光阴迷客 来源:CSDN 原文:https://blog.csdn.net/changqing5818/article/details/80867962?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!
相关推荐
Spring Boot 连接 Oracle 数据库 JDBC 配置步骤 在本文中,我们将详细介绍如何使用 Spring Boot 连接 Oracle 数据库,配置 JDBC 驱动程序,并实现数据库的基本操作。 Step 1: 添加依赖项 在 Spring Boot 项目中,...
总结来说,配置WebLogic连接Oracle RAC数据源是一个涉及多个层面的过程,包括JDBC驱动的管理、数据源的创建和配置、高可用性策略的设定,以及部署后的监控。正确执行这些步骤,可以确保WebLogic应用在Oracle RAC环境...
配置 Oracle RAC 集群数据源需要考虑多个方面,包括数据源 URL 的配置、连接池的配置、负载均衡和故障转移、服务器配置和集群配置等。正确地配置 Oracle RAC 集群数据源可以提高系统的性能和可用性。
- **OWSM 数据库连接**:Oracle Web Services Manager (OWSM) 是 Oracle SOA 套件的一部分,用于管理 Web 服务的安全性和策略。OWSM 使用独立的连接池,因此需要专门针对 OWSM 配置数据库连接。 - **OC4J 事务管理...
2.7.4创建RAC数据库 2.8测试RAC 2.8.1连接方式测试 2.8.2异常情况测试 2.9虚拟机搭建RAC 2.9.1虚拟机Xen简介 2.9.2启动主机Xen内核 2.9.3 Xen虚拟机创建网络环境 2.9.4创建Xen存储服务器 2.9.5创建Xen...
SCAN是Oracle RAC提供的一种客户端访问机制,它提供了一个单一的、公共的DNS域名,客户端(如JDBC或PL/SQL)可以通过SCAN来访问数据库,而无需知道具体的节点IP。SCAN由多个IP地址(通常为三个)组成,当客户端发起...
综上所述,RAC Oracle JDBC配置涉及到多个关键参数,它们共同确保了客户端能够高效且可靠地与RAC数据库集群进行交互。正确配置这些参数不仅能够提升应用程序的性能,还能增强其容错能力。理解并掌握这些参数的含义及...
Oracle 12c JDBC全量包是针对Oracle Database 12c版本的Java数据库连接(JDBC)驱动程序集合,提供了全面的驱动支持,适用于Java开发者进行与Oracle数据库的交互。这个包包含了针对不同Java Development Kit (JDK) ...
- ojdbc是Oracle提供的Java数据库连接(JDBC)驱动程序,用于在Java应用程序中与Oracle数据库进行通信。ojdbc的不同版本对应于Oracle数据库的不同版本,确保了兼容性和最佳性能。 - ojdbc5适用于Java 5和Oracle 10...
不过,Java开发者可以使用JDBC(Java Database Connectivity)API来连接和操作Oracle RAC数据库。JDBC驱动程序提供了对RAC集群的透明访问,使应用能够利用RAC的高可用性和负载均衡特性。 五、Oracle RAC的部署和...
Oracle Real Application Clusters (RAC),作为推荐的数据库软件Oracle Database 10g Enterprise Edition的一部分,是另一种关键组件,提供了24x7的数据库应用程序支持。RAC能够在低成本服务器集群上创建高可用性...
#### 四、Failover 连接配置 为了确保高可用性,Oracle 11g RAC 提供了两种连接失败转移机制:TAF (Transparent Application Failover) 和 FCF (Fast Connect Failover)。 ##### 1. TAF (透明应用程序故障转移) ...
客户端安装主要用于连接到Oracle数据库服务器进行数据操作。客户端软件包括Oracle SQL Developer、ODBC驱动、JDBC驱动等,安装后可以使用SQL语句进行查询、插入、更新和删除操作。 在学习Oracle数据库的过程中,...
在Java环境下,如果你的应用需要与Oracle 19c RAC交互,确保安装了JDBC驱动(如ojdbc8.jar),并在应用程序中配置正确的连接字符串和负载均衡策略。Oracle JDBC驱动支持连接池和RAC的负载均衡,使得应用能够透明地...
在Java环境下,Oracle RAC、ASM和DataGuard的实施可能涉及JDBC驱动的配置,以确保Java应用程序能够正确连接到RAC集群中的实例。此外,Java开发者可能需要了解Oracle的高级特性,如分布式事务处理,以便在多实例环境...
Oracle数据库是世界上最流行的商业关系型数据库...总之,Oracle 11g JDBC连接涉及到Java编程、数据库连接、SQL执行等多个方面。理解并熟练掌握这些知识点,能够帮助开发者高效地在Java应用中与Oracle数据库进行交互。
Java数据库连接(JDBC)API是一系列能够让Java编程人员访问数据库的接口,各个开发商的接口并不完全相同。在使用多年的Oracle公司的JDBC后,我积累了许多技巧,这些技巧能够使我们更好地发挥系统的性能和实现更多的...