Как использовать tnsnames.ora в Grails DataSource?

Я пытаюсь подключиться к виртуальному хосту с балансировкой нагрузки, указанному в tnsnames.ora, в моем приложении Grails в DataSource.groovy, но безуспешно — он (очевидно) выдает исключение «Указанный неизвестный хост».

Запись 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)
     )
   )
 )

Я могу подключиться к одной из служб (someServiceName1 и someServiceName2), просто установив значения в DataSource.groovy обычным способом, но я не знаю, как подключиться к виртуальному хосту с балансировкой нагрузки. Я искал возможность использовать tnsnames.ora в Grails, но не могу найти особенно "отличный" способ заставить эту работу работать. Любые указатели будут оценены.

P.S. Я бы предпочел решение, при котором я все еще мог бы вводить источник данных в свои контроллеры и т. д.


person MSM    schedule 27.10.2010    source источник


Ответы (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)))

Посмотрите здесь и здесь для ссылок.

person Javid Jamae    schedule 28.10.2010
comment
Спасибо за ссылки. Включенный пример не работал для меня, но оказалось, что ссылки содержат конкретную строку подключения, которую мне нужно было установить. - person Neoryder; 10.02.2014

Вы могли бы использовать

jdbc:oracle:oci:@someServiceName 

Я использую это, обратите внимание, что это oci, а не тонкий. Меня устраивает.

person summersmile1984    schedule 27.08.2012

Просто столкнулся с этой проблемой, вот что исправило это для меня:

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

Меня сбила с толку косая черта между портом и именем службы. Если вы используете там двоеточие, он читает его как SID, а не как имя службы.

Удачи!

person Charles Trust    schedule 01.07.2015