Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 连接到RAC数据库的正确JDBC URL是什么_Java_Jdbc - Fatal编程技术网

Java 连接到RAC数据库的正确JDBC URL是什么

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

我们使用一个简单(自定义)的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是什么?

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连接字符串。你的帖子真的很有帮助。谢谢弗朗西斯科。我得到了答案(见公认答案)。无论如何,感谢你抽出时间来帮忙。