代码之家  ›  专栏  ›  技术社区  ›  Eli Courtwright

在Java中连接到Oracle集群

  •  4
  • Eli Courtwright  · 技术社区  · 16 年前

    我们有一对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)
        )
      )
    

    当我连接到使用 特斯纳莫斯 文件。但是,我也有一个Java程序,它使用 oracle.jdbc.pool.OracleDataSource 类以建立连接

    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();
    }
    

    它直接连接到其中一个节点。我想用负载平衡来代替 特斯纳莫斯 方法,使用负载平衡或其他方法连接到其中一个节点,这样,如果其中一个节点关闭,那么它将自动连接到另一个节点。

    因为我只有两个节点,所以我可以很容易地尝试打开到第一个节点的连接,如果这不起作用,那么打开到第二个节点的连接。但是,我想知道是否有一种更正确的方法可以做到这一点。

    我看到有一个 setTNSEntryName 参数,但由于我的 特斯纳莫斯 在一个不标准的地方,我需要设置 TNS_ADMIN 环境变量,我不确定,我甚至可以从Java内部。我也不确定这在任何情况下都会起作用。

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

    1 回复  |  直到 14 年前
        1
  •  9
  •   Kaitsu    16 年前

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

    使用这个方法 设置网址 设置URL。如果设置了url,则将忽略所有其他属性,如databasename、servername、portnumber、网络协议、tnsentry和驱动程序类型。

    希望这有帮助!

    推荐文章