【问题标题】:What is the correct JDBC URL to connect to a RAC database连接到 RAC 数据库的正确 JDBC URL 是什么
【发布时间】:2009-10-29 21:22:08
【问题描述】:

我们使用简单(自定义)JDBC 连接器类从我们的代码连接到 Oracle。此类从资源文件中读取连接属性并尝试与 Oracle 建立连接(瘦连接)。

但是,最近数​​据库已移至 RAC,现在应用程序无法连接到数据库。

这是 TNSPING 输出:

Used LDAP adapter to resolve the alias
Attempting to contact (DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=OFF)(FAILOVER=ON)
(ADDRESS=(PROTOCOL=TCP)(HOST=tst-db1.myco.com)(PORT=1604))
(ADDRESS=(PROTOCOL=TCP)(HOST=tst-db2.myco.com)(PORT=1604)))(CONNECT_DATA=    
SERVICE_NAME=mydb1.myco.com)(SERVER=DEDICATED)))
OK (80 msec)

在这种情况下要指定的正确 URL 是什么?

【问题讨论】:

    标签: java jdbc


    【解决方案1】:

    网址应如下所示:

    jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=OFF)(FAILOVER=ON)
    (ADDRESS=(PROTOCOL=TCP)(HOST=tst-db1.myco.com)(PORT=1604))
    (ADDRESS=(PROTOCOL=TCP)(HOST=tst-db2.myco.com)(PORT=1604)))
    (CONNECT_DATA=(SERVICE_NAME=mydb1.myco.com)(SERVER=DEDICATED)))
    

    实际上,只需从您的tnsnames.ora 复制 tnsentries。

    【讨论】:

    • 那个。是。惊人的。我不知道你可以直接从tnsnames.ora复制。我刚刚涉过一些 JDBC 连接字符串地狱。你的帖子真的很有帮助。
    【解决方案2】:

    tnsnames 文件、较旧的 Oracle 名称服务器和较新的、推荐的 LDAP 目录服务器解析数据库名称的方法是避免将主机名、地址、端口等硬编码到连接字符串中。 DBA 应该能够在不破坏任何内容的情况下将数据库移动到新主机或端口。

    设置瘦连接 URL 的最佳方法是使用以下语法:

    jdbc:oracle:thin:@ldap://<OID server name>:<OID port>/<DB SID or Service Name>,cn=OracleContext,dc=<yourdomain>

    因此,在您的情况下,如果“oid”是您公司 OID 服务器的 DNS 可解析名称,并且它使用端口 5000,那么它将是:

    jdbc:oracle:thin:@ldap://oid:5000/mydb1,cn=OracleContext,dc=myco,dc=com

    如果您的 DBA 尚未设置 OID,那么他们就落后了。是时候招募新的 DBA了。

    -挤压

    【讨论】:

      【解决方案3】:

      您也可以在 oracle 11g r2 中使用扫描 ip 代替您的节点 ip:

        testi=(DESCRIPTION = 
      (ADDRESS_LIST= 
       (ADDRESS= (PROTOCOL = TCP)(HOST = scan-ip-or-name)(PORT = 1521))
       (FAILOVER = on)
       (LOAD_BALANCE = on)
      )   
      (CONNECT_DATA=
       (SERVICE_NAME = testi)
      ) )
      

      【讨论】:

        【解决方案4】:

        您可能需要查看 OCI 驱动程序。我相信他们应该表现得更好,更好地处理 RAC。

        来自http://download.oracle.com/docs/cd/B10500_01/appdev.920/a96590/adg01dev.htm#429762

        OCI 与其他访问 Oracle 数据库的方法相比具有显着优势:

        • 对应用程序设计的各个方面进行更细粒度的控制。
        • 对程序执行的高度控制。
        • 使用熟悉的 3GL 编程技术和应用程序开发工具,例如浏览器和调试器。
        • 支持动态 SQL,方法 4。
        • 可在所有 Oracle 编程接口的最广泛平台上使用。
        • 使用回调进行动态绑定和定义。
        • 描述公开服务器元数据层的功能。
        • 已注册客户端应用程序的异步事件通知。
        • 增强了数组插入、更新和删除的数组数据操作语言 (DML) 功能。
        • 能够将提交请求与执行关联以减少往返次数。
        • 使用透明预取缓冲区优化查询以减少往返次数。
        • 线程安全,因此您不必在 OCI 句柄上使用互斥锁 (mutex)。
        • 非阻塞模式下的服务器连接意味着当调用仍在执行或无法完成时,控制权返回给 OCI 代码。

        【讨论】:

        • 同意 - 但企业政策(叹气)建议使用瘦客户端而不是“厚”客户端。
        【解决方案5】:

        我不确定你是否解决了你的问题,但我遇到了同样的问题,这个解决方案对我有用:

        jdbc:oracle:oci:@(DESCRIPTION=(FAILOVER=on)(ADDRESS=(PROTOCOL=TCP)(HOST=**mi.host**)(PORT=**1521**))(LOAD_BALANCE=yes)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=**serviceName**)))
        

        【讨论】:

        • 谢谢弗朗西斯科。我得到了解决方案(见接受的答案)。无论如何,感谢您抽出时间伸出援助之手。
        【解决方案6】:

        这是我用的:

        jdbc:oracle:thin:@ldap://xxx:389/yyy,cn=OracleContext,dc=zzz,dc=com 
        ldap://xxx:389/yyy,cn=OracleContext,dc=zzz,dc=com 
        ldap://xxx:389/yyy,cn=OracleContext,dc=zzz,dc=com
        

        【讨论】:

          猜你喜欢
          • 2020-11-16
          • 2011-05-16
          • 2019-09-06
          • 2018-07-02
          • 2023-03-03
          • 2021-04-27
          • 2011-06-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多