Как использовать tnsnames.ora в Grails DataSource? - PullRequest
2 голосов
/ 27 октября 2010

Я пытаюсь подключиться к виртуальному хосту с балансировкой нагрузки, указанному в 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, но я не могу найти особенно "отличный" способ сделать эту работу.Будем благодарны за любые указатели.

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

Ответы [ 3 ]

3 голосов
/ 28 октября 2010

Я думаю, вам нужно настроить один сервис с несколькими адресами. Затем вам нужно установить в строке 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 голос
/ 01 июля 2015

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

URL = 'JDBC: оракул: тонкий: @servername: PORT / имя_службы'

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

Удачи!

1 голос
/ 27 августа 2012

Вы можете использовать

jdbc:oracle:oci:@someServiceName 

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

...