JDBC连接Oracle RAC

7 篇文章 0 订阅
1)JDBC连接的配置方式
,既然数据库本身已经支持了RAC,那么只要在JDBC连接字符串中将RAC的配置加上去即可, 根据资料和目前的业务需求,我们的针对HOST=10.87.25.37这台主机的数据库实例的JDBC连接字符串应该这样配置
  
   URL="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)
   (HOST=10.87.25.37)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)
   (HOST=10.87.25.38)(PORT=1521))
   (HOST=10.87.25.39)(PORT=1521))
(FAILOVER=on)(LOAD_BALANCE=off))
   (CONNECT_DATA= (SERVICE_NAME=bidwb)))"
  
   这个连接配置表示只支持failover,不支持loadbalance.根据蓝色字符串可以表示.即按照顺序,使用该JDBC字符串获取的连接,将根据配置的主机的先后顺序,依次进行failover
   即如果在10.87.25.37数据库实例不能被访问,那么就转到10.87.25.38执行,如果10.87.25.38也数据库实例不能被访问,那么就转到10.87.25.39执行
同理
对于HOST=10.87.25.38这台主机的数据库实例的JDBC连接字符串应该这样配置
URL="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)
   (HOST=10.87.25.38)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)
   (HOST=10.87.25.39)(PORT=1521))
   (HOST=10.87.25.37)(PORT=1521))
(FAILOVER=on)(LOAD_BALANCE=off))
   (CONNECT_DATA= (SERVICE_NAME=bidwb)))"
对于HOST=10.87.25.39这台主机的数据库实例的JDBC连接字符串应该这样配置
URL="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)
   (HOST=10.87.25.39)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)
   (HOST=10.87.25.37)(PORT=1521))
   (HOST=10.87.25.38)(PORT=1521))
(FAILOVER=on)(LOAD_BALANCE=off))
   (CONNECT_DATA= (SERVICE_NAME=bidwb)))"
即只是各个Host的顺序不同
2)本地服务名连接的配置方式
对于HOST=10.87.25.37这台主机的数据库实例的本地服务名应该这样配置
 37bidwb =
 (DESCRIPTION = 
    (ADDRESS_LIST= 
     (ADDRESS= (PROTOCOL = TCP)(HOST = 10.87.25.37)(PORT = 1521))
     (ADDRESS= (PROTOCOL = TCP)(HOST = 10.87.25.38)(PORT = 1521))
     (ADDRESS= (PROTOCOL = TCP)(HOST = 10.87.25.39)(PORT = 1521))
     (FAILOVER = on)
     (LOAD_BALANCE = off)
    )   
    (CONNECT_DATA= (SERVICE_NAME = bidwb))
 )
 
对于HOST=10.87.25.38这台主机的数据库实例的本地服务名应该这样配置
 37bidwb =
 (DESCRIPTION = 
    (ADDRESS_LIST= 
     (ADDRESS= (PROTOCOL = TCP)(HOST = 10.87.25.38)(PORT = 1521))
     (ADDRESS= (PROTOCOL = TCP)(HOST = 10.87.25.39)(PORT = 1521))
     (ADDRESS= (PROTOCOL = TCP)(HOST = 10.87.25.37)(PORT = 1521))
     (FAILOVER = on)
     (LOAD_BALANCE =off)
    )   
    (CONNECT_DATA= (SERVICE_NAME = bidwb))
 )
 
对于HOST=10.87.25.39这台主机的数据库实例的本地服务名应该这样配置
 37bidwb =
 (DESCRIPTION = 
    (ADDRESS_LIST= 
     (ADDRESS= (PROTOCOL = TCP)(HOST = 10.87.25.39)(PORT = 1521))
     (ADDRESS= (PROTOCOL = TCP)(HOST = 10.87.25.37)(PORT = 1521))
     (ADDRESS= (PROTOCOL = TCP)(HOST = 10.87.25.38)(PORT = 1521))
     (FAILOVER = on)
    (LOAD_BALANCE = off)
    )   
    (CONNECT_DATA= (SERVICE_NAME =bidwb))
 )
 
配置方式与JDBC连接字符串大同小异
配置也表示只支持failover,不支持loadbalance.根据蓝色字符串可以表示.即按照顺序,使用该JDBC字符串获取的连接,将根据配置的主机的先后顺序,依次进行failover.
测试方式也应该分为两种,一种是测试JDBC连接字符串,一种是测试本地服务名.
测试JDBC连接字符串可以通过存储过程任务来执行,这也是我们最初的测试目标.
我们可以通过关闭数据库监听的方式,看是否能够自动地failover.,例如一个存储过程本来是
在37 Oracle上执行,现在关闭37 Oracle的监听,测试该存储过程仍否能够正常执行.
一种是测试本地连接字符串,这种应该没问题,因为是oracle本身的客户端来支持,可以通过
OCI抽取或Oracle装载来测试,测试方式与上类似
 
-----------------------------------------------------------------转载---------------------------------------

jdbc连接oracle的连接串如下:

String url="jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = host2)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = host1)(PORT = 1521))(LOAD_BALANCE = yes)(FAILOVER = ON)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = db.domain)(FAILOVER_MODE=(TYPE = SELECT)(METHOD = BASIC)(RETIRES = 20)(DELAY = 15))))";


java测试程序如下: 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class Test {

public static void main(String arg[]) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = host1)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = host2)(PORT = 1521))(LOAD_BALANCE = yes)(FAILOVER = ON)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = db.domain)(FAILOVER_MODE=(TYPE = SELECT)(METHOD = BASIC)(RETIRES = 20)(DELAY = 15))))";
Connection c = DriverManager.getConnection(url,"aa","aa");
Statement s = c.createStatement();
ResultSet r = s.executeQuery("select 1 from dual");
while(r.next()) {
System.out.println(r.getString(1));
}
}catch(Exception e) {
System.out.println(e.toString());
}
}

}


Nacos是一个开源的分布式置中心,它本身并不直接支持连接Oracle RAC (Real Application Cluster) 库。然而,你可以通过以下步骤间接实现这种集成: 1. **环境准备**: - 安装Nacos客户端或SDK,例如如果你的应用需要访问Nacos置,那么你需要添加Nacos的依赖。 - 确保你的应用连接数据库的驱动,如JDBC Oracle driver。 2. **置数据源**: - 置你的应用程序的数据源,设置为连接Oracle RAC。通常,这涉及到在Spring Boot、Spring Cloud或你的应用配置文件中设置数据库URL、用户名、密码等信息。 ```yaml data-source: url: jdbc:oracle:thin:@<rac_cluster_address>:<service_name>:<port> username: <username> password: <password> ``` 3. **适RAC特性**: - 如果Oracle RAC需要特殊认证或者网络模式(如共享服务器模式),记得调整相应的置。 - 考虑读写分离或复制策略,因为RAC支持多个节点作为数据源。 4. **事务管理**: - Oracle RAC可能需要特定的事务处理规则,比如两阶段提交(Two-Phase Commit, TPC)。 5. **服务发现**: - Nacos可以用于服务发现,如果你的应用需要注册服务到Nacos,确保服务注册的信息能够正确指向Oracle RAC环境。 由于Nacos主要关注的是置管理和服务发现,实际数据库操作还是由你的应用代码负责的。如果遇到关于Nacos和RAC结合的具体技术问题,可能会涉及到数据库连接池的管理或者其他数据库相关的错误处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值