Oracle集群(RAC)及 jdbc 连接双机数据库

Oracle集群(RAC)及 jdbc 连接双机数据库

Oracle集群(RAC)及 jdbc 连接双机数据库 - secyaher - 隐龙 为了一生的信念

还是因为工作经验太浅,虽然工作中每天都要用到ORACLE,不过集群还是第一次接触(包括11G也是第一次用),10G和11G在使用方面没有什么太大区别,主要还是记录下这次集群的测试和使用JDBC链接ORACLE RAC的连接串配置。

集群是把Oracle 实例(运行在服务器上的真来访问数据的进程和内存结构)与Oracle数据库(在存储设备上的实际数据的物理结构,也就是通常所说的数据文件)进行分离。一个真真数据库是一个可为多个实例访问的单一数据库。在真真中,每个实例在各自的服务器上运行。当需要添加额外的资源时,可以在不停机的情况下很容易地增加节点和实例。一旦新的实例启动,真真程序通过服务可以马上利真到,而无需修改真真或真真服务器。恩~以上为照抄 = =

这次的客户是双机访问操作数据库,一台实例名是orcl1,一台是orcl2。访问数据库服务名是orcl,之前我也搜了些资料,最后的想法是写了一个测试程序来测试JDBC链接ORACLE RAC的连接串。代码如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
 
public class RacTest {
       
 
 /**
  * 测试RAC
  * 
  */
 public static void main(String[] args) throws ClassNotFoundException {
       
 
  String url;
  Connection conn = null;
  Statement stmt = null;
  ResultSet rs = null;
 
  Properties conProps = new Properties();
 
  conProps.put("user", "sys");
  conProps.put("password", "sys");
  conProps.put("internal_logon", "sysdba");
 
  // String username = "sys";
  // String password = "oracle";
 
  url = "jdbc:oracle:thin:@(description= (ADDRESS_LIST =";
  url += "(address=(protocol=tcp)(host=10.37.27.111)(port=1521))";
  url += "(address=(protocol=tcp)(host=10.37.27.112)(port=1521))";
  url += "(load_balance=yes))";
  url += "(connect_data =";
  url += "(server = dedicated)";
  url += "(service_name=orcl)";
  url += "(failover_mode =";
  url += "(type=session)";
  url += "(method=basic)";
  url += "(retries=5)";
  url += "(delay=15))";
  url += " ))";
 
  String sql = "select * from v$instance";
 
  try {
       
   Class.forName("oracle.jdbc.driver.OracleDriver");
   conn = DriverManager.getConnection(url, conProps);
   // conn = DriverManager.getConnection(url, username, password);
   stmt = conn.createStatement();
   rs = stmt.executeQuery(sql);
   if (rs.next()) {
       
    System.out.print(rs.getString("INSTANCE_NAME"));
   }
   rs.close();
   rs = null;
   stmt.close();
   stmt = null;
   conn.close();
   conn = null;
  } catch (SQLException ex) {
       
   ex.printStackTrace();
  } finally {
       
 
   if (rs != null) {
       
    try {
       
     rs.close();
 
     rs = null;
    } catch (Exception ex) {
       
     ex.printStackTrace();
    }
   }
   if (stmt != null) {
       
    try {
       
     stmt.close();
     stmt = null;
    } catch (Exception ex) {
       
     ex.printStackTrace();
    }
   }
   if (conn != null) {
       
    try {
       
     conn.close();
     conn = null;
    } catch (SQLException ex) {
       
     ex.printStackTrace();
    }
   }
 
  }
 
 }
 
}

每次执行都会打印出链接到此台服务器ORACLE的SID,如果要负载均衡的话,他应该随机会打印出orcl1和orcl2。由于只有SYSDBA用户才有权限查询出SID所以测试的用户得是DBA身份,不知道我这样的测试方法是否正确,总之是测试通过了(ORCL1和ORCL2随机打印)。

顺便记录下配置链接字符串的参数:

address后面就是连接的IP和端口号没什么说的。load_balance=yes;表示是否负载均衡。server = dedicated;表示专用服务器模式,感觉可以去掉。service_name=orcl;要操作数据库的服务名。TYPE = SESSION表示当一个连接好的会话的实例发生故障,系统会自动将会话切换到其他可用的实例,前台应用无须再度发起连接,但会话正在执行的SQL 需要重新执行。METHOD = BASIC表示初始连接就连接一个接点,他还有个选项是preconnect,表示初始连接所有的接点。RETRIES:重试次数。DELAY:重试的延迟(以秒为单位)。

并且集群中如果ORACLE服务器的LISTENER配置的是本机的机器名,则应用方面最好把winnt下的system32/drivers/etc/hosts文件更改一下。最后加上IP对应的机器名,比如:

10.37.27.111 linux1-vip

10.37.27.112 linux2-vip

如果有什么不对的以后继续更改 = =。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100487.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C++和Java哪个比较好入门?初学者该如何选择?

    C++和Java哪个比较好入门?初学者该如何选择?选择好的方向比努力更重要,对于初学编程的人来说选择一门合适的编程语言关系到自己以后的职业发展。c++和Java那个更适合作为入门语言?给大家简单科普一下~C++语言它是正宗的C语言的嫡系,由C语言发展而来。C++支持多种编程范式–面向对象编程、泛型编程和过程化编程,支持类:类、封装、重载等特性。C++语言的主要特点表现在两个方面:尽量兼容C 支持面向对象的方法。它操持了C的简洁、高效的接近汇编语言等特点,对C的类型系统进行了改革的扩充,因此C++比C更安全,C++的编译系统.

    2022年7月9日
    21
  • 笔试逻辑推理选择题_应聘逻辑测试题目及答案

    笔试逻辑推理选择题_应聘逻辑测试题目及答案【笔试面试】75道逻辑推理题及答案更多精彩请直接访问SkySeraph个人站点:www.skyseraph.com啰嗦:昨天公司开全球研发中心实习生沟通会,其中有个环节是做逻辑推理竞猜,还是得平时

    2022年8月4日
    15
  • C语言实现选择排序

    C语言实现选择排序选择排序是在每一轮比较中不是每当a[i]<a[j]时候就交换,而是用一个变量k记下其中较小的元素的下标值,在a[i]与a[i+1]~a[n]全部进行比较后,只将a[i]与a[i+1]~a[n]中最小的值进行交换,为此每一轮只需要将a[i]与a[k]的值进行交换即可。设有n个数据存储到从a[0]~a[n+1]的n个数组元素中,则选择排序过程分为如下n-1步骤:第一步:在第1~n个数中找出最小者,然后与第一个数进行比较,前1个数排好序第二步:在第2~n个数中找出最小者,然后与第二个数进行交换,

    2022年6月25日
    30
  • mysql的命名规则_Mysql命名规范

    mysql的命名规则_Mysql命名规范转自:https://blog.csdn.net/fujian9544/article/details/86649096数据库表字段命名规范内容由网上摘抄并进行总结/精简/标记后的内容本文包含了数据库命名数据库表命名数据库表字段命名SQL语言编码的规范一、数据库命名规范采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线’_’组成,命名简洁明确,多个单词用下划线’_’分隔,一个…

    2022年7月14日
    14
  • sublime3激活码【在线注册码/序列号/破解码】

    sublime3激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    38
  • mysql如何批量添加数据_mysql如何批量insert数据

    mysql如何批量添加数据_mysql如何批量insert数据mysql批量insert数据的方法:1、循环插入;2、减少连接资源,拼接一条sql;3、使用存储过程;4、使用【MYSQLLOCAL_INFILE】。本教程操作环境:windows7系统、mysql8.0.22版,该方法适用于所有品牌电脑。mysql批量insert数据的方法:方法一:循环插入这个也是最普通的方式,如果数据量不是很大,可以使用,但是每次都要消耗连接数据库的资源。大致思维如下(我…

    2025年8月12日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号