我正在尝试连接到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注入我的控制器等。
答案 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)))
答案 1 :(得分:1)
您可以使用
jdbc:oracle:oci:@someServiceName
我用它,注意它是oci
,而不是瘦。它对我有用。
答案 2 :(得分:1)
刚遇到这个问题,这就是为我解决的问题:
URL =' JDBC:预言:瘦:@servername:PORT /服务名'
端口和服务名称之间的正斜杠使我绊倒了。如果你在那里使用冒号,它会将其读作SID而不是服务名称。
祝你好运!