Java 连接到RAC数据库的正确JDBC URL是什么
我们使用一个简单(自定义)的JDBC连接器类从代码连接到Oracle。此类从资源文件读取连接属性,并尝试建立到Oracle的连接(精简连接) 但是,最近数据库已移动到RAC,现在应用程序无法连接到数据库 以下是TNSPING输出:Java 连接到RAC数据库的正确JDBC URL是什么,java,jdbc,Java,Jdbc,我们使用一个简单(自定义)的JDBC连接器类从代码连接到Oracle。此类从资源文件读取连接属性,并尝试建立到Oracle的连接(精简连接) 但是,最近数据库已移动到RAC,现在应用程序无法连接到数据库 以下是TNSPING输出: Used LDAP adapter to resolve the alias Attempting to contact (DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=OFF)(FAILOVER=ON) (ADDRESS=(PROT
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是什么?URL应如下所示:
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,您可能需要查看OCI驱动程序。我相信他们应该表现更好,更好地处理RAC
从
与其他访问Oracle数据库的方法相比,OCI具有显著的优势:
- 对应用程序设计的所有方面进行更细粒度的控制
- 对程序执行的高度控制
- 使用熟悉的3GL编程技术和应用程序开发工具,如浏览器和调试器
- 支持动态SQL,方法4
- 在所有Oracle编程接口中最广泛的平台上可用
- 使用回调动态绑定和定义
- 描述公开服务器元数据层的功能
- 已注册客户端应用程序的异步事件通知
- 增强的阵列数据操作语言(DML)功能,用于阵列插入、更新和删除
- 将提交请求与执行关联以减少往返的能力
- 使用透明预取缓冲区优化查询以减少往返
- 线程安全,因此不必在OCI句柄上使用互斥锁(互斥锁)
- 非阻塞模式下的服务器连接意味着当调用仍在执行或无法完成时,控制返回到OCI代码
tnsnames文件、较旧的Oracle名称服务器和较新的推荐LDAP目录服务器解析数据库名称的方法的要点是避免将主机名、地址、端口等硬编码到连接字符串中。DBA应该能够将数据库移动到新的主机或端口,而不会中断任何操作 设置精简连接URL的最佳方法是使用以下语法:
jdbc:oracle:thin:@ldap://,cn=OracleContext,dc=
因此,在您的情况下,如果“oid”是您公司的oid服务器的DNS可解析名称,并且它使用端口5000,那么它将是:
jdbc:oracle:thin:@ldap://oid:5000/mydb1,cn=OracleContext,dc=myco,dc=com
如果您的DBA还没有设置OID,那么他们就落后了。是时候找新的DBA了
-squish您还可以在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)
) )
我不确定你是否解决了你的问题,但我也遇到了同样的问题,这个解决方案对我很有效:
jdbc:oracle:oci:@(DESCRIPTION=(FAILOVER=on)(ADDRESS=(PROTOCOL=TCP)(HOST=**mi.host**)(PORT=**1521**))(LOAD_BALANCE=yes)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=**serviceName**)))
这就是我使用的:
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
同意-但企业政策(sign)建议使用瘦客户机而不是“厚”客户机。是令人惊叹的。我不知道你可以直接从
tnsnames.ora
复制。我刚才费力地浏览了一些JDBC连接字符串。你的帖子真的很有帮助。谢谢弗朗西斯科。我得到了答案(见公认答案)。无论如何,感谢你抽出时间来帮忙。