如何在Grails DataSource中使用tnsnames.ora?

时间:2010-10-27 16:10:14

标签: oracle grails datasource tnsnames

我正在尝试连接到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,但我似乎无法找到一种特殊的“常规”方式来完成这项工作。任何指针都将受到赞赏。

P.S。我更喜欢一个解决方案,我仍然可以将dataSource注入我的控制器等。

3 个答案:

答案 0 :(得分: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)))

查看herehere以获取参考。

答案 1 :(得分:1)

您可以使用

jdbc:oracle:oci:@someServiceName 

我用它,注意它是oci,而不是瘦。它对我有用。

答案 2 :(得分:1)

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

URL =' JDBC:预言:瘦:@servername:PORT /服务名'

端口和服务名称之间的正斜杠使我绊倒了。如果你在那里使用冒号,它会将其读作SID而不是服务名称。

祝你好运!