java - 使用 Java 连接到 Oracle 集群

标签 java oracle jdbc cluster-computing

我们有一对 Oracle 服务器,它们被设置为集群中的节点(如果我的术语有误,请见谅)。在我的 tnsnames.ora 文件中,我们有一个条目看起来像

EXAMPLE.GOV =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 1.2.3.4)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 1.2.3.5)(PORT = 1521))
    (LOAD_BALANCE = yes)
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = example.gov)
    )
  )

当我连接到使用 tnsnames.ora 文件的程序时,这会起作用。但是,我还有一个使用 oracle.jdbc.pool.OracleDataSource 的 Java 程序。建立连接的类

public static Connection connect() throws Exception {
    OracleDataSource ods = new OracleDataSource();
    ods.setDriverType("thin");
    ods.setServerName("1.2.3.4");
    ods.setDatabaseName("example");
    ods.setPortNumber(1521);
    ods.setUser("scott");
    ods.setPassword("tiger");
    return ods.getConnection();
}

它直接连接到其中一个节点。我想改为使用负载平衡 tnsnames.ora 方法,它使用负载平衡或其他任何方式连接到其中一个节点,这样如果其中一个节点出现故障,那么它'将自动连接到另一个。

因为我只有两个节点,所以我可以轻松地尝试打开与第一个节点的连接,如果这不起作用,则打开与第二个节点的连接。但是,我想知道是否有更正确的方法来执行此操作。

我看到有一个 setTNSEntryName 参数,但由于我的 tnsnames.ora 位于非标准位置,我需要设置 TNS_ADMIN 环境变量,我不确定我什至可以在 Java 中做到这一点。我也不确定这在任何情况下都有效。

有谁知道如何从 Java 程序连接到 Oracle 节点集群?

最佳答案

对于 Oracle JDBC 瘦驱动程序,我认为这可以用作连接 url:

jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)
(ADDRESS=(PROTOCOL=TCP)(HOST=1.2.3.4) (PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=1.2.3.5) (PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=example.gov)))

使用方法setUrl 设置url。如果设置了 URL,将忽略所有其他属性,如数据库名称、服务器名称、端口号、网络协议(protocol)、tnsentry 和驱动程序类型。

希望这对您有所帮助!

关于java - 使用 Java 连接到 Oracle 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2142211/

相关文章:

c# - 如何让protobuf-net和protostuff相互支持.Net和Java中的继承类?

java - 在发布新帖子之前向用户提供类似帖子的功能的逻辑是什么?

Oracle Apex 5.1 单个页面上的多个表格表单

javascript - Node JS 运行两个不同的数据库

java - JDBC Mysql 错误?

java - linux下使用ant的tar任务时如何指定子目录的权限?

java - 将字符串比较为 null 或空时返回 boolean 值

oracle - unixODBC/Oracle : How do I specify all the datasource info in the connection string ONLY, 并且不在 odbc*.ini 文件中

java - "given file does not exist"UCanAccess 连接问题

java - 如何访问从java中的类返回的连接引用对象?