2

我正在尝试在 DataSource.groovy 的 Grails 应用程序中连接到 tnsnames.ora 中指定的负载平衡虚拟主机,但没有成功 - 它(显然)引发“未知主机指定”异常。

tnsnames 条目如下所示

someServiceName =
 (DESCRIPTION_LIST =
   (FAILOVER=ON)
   (LOAD_BALANCE=ON)
   (DESCRIPTION =
     (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = someServerName1)(PORT = 1521))
     )
     (CONNECT_DATA =
       (SERVICE_NAME = someServiceName1)
     )
   )
   (DESCRIPTION =
     (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = someServerName2)(PORT = 1521))
     )
     (CONNECT_DATA =
       (SERVICE_NAME = someServiceName2)
     )
   )
 )

我可以通过以通常的方式简单地设置 DataSource.groovy 中的值来连接到服务之一(someServiceName1 和 someServiceName2),但我不知道如何连接到负载平衡的虚拟主机。我已经四处寻找在 Grails 中使用 tnsnames.ora,但我似乎找不到一种特别“常规”的方式来完成这项工作。任何指针将不胜感激。

PS我更喜欢一个我仍然能够将数据源注入我的控制器等的解决方案。

4

3 回答 3

3

我认为您需要配置具有多个地址的单个服务。然后你必须将你的数据源 URL 字符串设置为这样的(当然没有换行符):

jdbc:oracle:thin@(DESCRIPTION=
   (LOAD_BALANCE=on)
   (ADDRESS=(PROTOCOL=TCP)(HOST=someServerName1) (PORT=1521))
   (ADDRESS=(PROTOCOL=TCP)(HOST=someServerName2) (PORT=1521))
   (CONNECT_DATA=(SERVICE_NAME=theOnlyServiceName)))

在这里这里查看参考资料。

于 2010-10-28T19:17:03.863 回答
1

你可以使用

jdbc:oracle:oci:@someServiceName 

我用这个,注意它oci不是薄的。这个对我有用。

于 2012-08-27T07:41:39.407 回答
1

刚刚遇到这个问题,以下是为我解决的问题:

url='jdbc:oracle:thin:@servername:PORT/servicename'

是端口和服务名称之间的正斜杠让我感到困惑。如果您在此处使用冒号,它会将其读取为 SID 而不是服务名称。

祝你好运!

于 2015-07-01T19:20:55.150 回答