Какой правильный URL-адрес JDBC для подключения к базе данных RAC - PullRequest
9 голосов
/ 30 октября 2009

Мы подключаемся к Oracle из нашего кода с помощью простого (пользовательского) класса JDBC-коннектора. Этот класс читает свойства соединения из файла ресурсов и пытается установить соединение с Oracle (тонкое соединение).

Однако недавно база данных была перемещена в RAC, и теперь приложение не может подключиться к БД.

Вот вывод TNSPING:

Used LDAP adapter to resolve the alias
Attempting to contact (DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=OFF)(FAILOVER=ON)
(ADDRESS=(PROTOCOL=TCP)(HOST=tst-db1.myco.com)(PORT=1604))
(ADDRESS=(PROTOCOL=TCP)(HOST=tst-db2.myco.com)(PORT=1604)))(CONNECT_DATA=    
SERVICE_NAME=mydb1.myco.com)(SERVER=DEDICATED)))
OK (80 msec)

Какой будет правильный URL для указания в этом случае?

Ответы [ 6 ]

17 голосов
/ 30 октября 2009

URL должен выглядеть следующим образом:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=OFF)(FAILOVER=ON)
(ADDRESS=(PROTOCOL=TCP)(HOST=tst-db1.myco.com)(PORT=1604))
(ADDRESS=(PROTOCOL=TCP)(HOST=tst-db2.myco.com)(PORT=1604)))
(CONNECT_DATA=(SERVICE_NAME=mydb1.myco.com)(SERVER=DEDICATED)))

На самом деле, просто скопируйте tnsentries из вашего tnsnames.ora.

2 голосов
/ 30 апреля 2010

Смысл файла tnsnames, более старого сервера имен Oracle и более нового рекомендуемого метода сервера баз данных LDAP для разрешения имен баз данных состоит в том, чтобы избежать необходимости жестко кодировать имена узлов, адреса, порты и т. Д. В строку подключения. Администраторы баз данных должны иметь возможность перемещать базу данных на новый хост или порт, ничего не нарушая.

Лучший способ задать тонкий URL-адрес для подключения - использовать следующий синтаксис:

jdbc:oracle:thin:@ldap://<OID server name>:<OID port>/<DB SID or Service Name>,cn=OracleContext,dc=<yourdomain>

Так что в вашем случае, если бы "oid" было разрешаемым DNS-именем OID-сервера в вашей компании, и он использовал порт 5000, это было бы:

jdbc:oracle:thin:@ldap://oid:5000/mydb1,cn=OracleContext,dc=myco,dc=com

Если ваши администраторы еще не настроили OID, они сильно отстают. Время получать новых администраторов баз данных.

-squish

1 голос
/ 03 ноября 2009

Возможно, вы захотите взглянуть на драйверы OCI. Я считаю, что они должны быть более эффективными и лучше справляться с RAC.

от http://download.oracle.com/docs/cd/B10500_01/appdev.920/a96590/adg01dev.htm#429762

OCI обеспечивает значительные преимущества по сравнению с другими методами доступа к базе данных Oracle:

  • Более детальный контроль над всеми аспектами дизайна приложения.
  • Высокая степень контроля выполнения программы.
  • Использование знакомых методов программирования 3GL и инструментов разработки приложений, таких как браузеры и отладчики.
  • Поддержка динамического SQL, метод 4.
  • Доступность на самом широком спектре платформ всех программных интерфейсов Oracle.
  • Динамическое связывание и определение с помощью обратных вызовов.
  • Опишите функциональность для предоставления слоев метаданных сервера.
  • Асинхронное уведомление о событии для зарегистрированных клиентских приложений.
  • Расширенные возможности языка обработки данных массива (DML) для INSERT, UPDATE и DELETE для массива.
  • Возможность связать запрос на фиксацию с исполнением, чтобы уменьшить количество обращений.
  • Оптимизация запросов с использованием прозрачных буферов предварительной выборки для сокращения количества обращений.
  • Потокобезопасность, поэтому вам не нужно использовать взаимные эксклюзивные блокировки (мьютекс) на дескрипторах OCI.
  • Соединение с сервером в неблокирующем режиме означает, что управление возвращается к коду OCI, когда вызов все еще выполняется или не может быть завершен.
0 голосов
/ 11 мая 2017

это то, что я использовал:

jdbc:oracle:thin:@ldap://xxx:389/yyy,cn=OracleContext,dc=zzz,dc=com 
ldap://xxx:389/yyy,cn=OracleContext,dc=zzz,dc=com 
ldap://xxx:389/yyy,cn=OracleContext,dc=zzz,dc=com
0 голосов
/ 10 марта 2016

Я не уверен, что вы решите свою проблему, но я столкнулся с той же проблемой, и это решение работает для меня:

jdbc:oracle:oci:@(DESCRIPTION=(FAILOVER=on)(ADDRESS=(PROTOCOL=TCP)(HOST=**mi.host**)(PORT=**1521**))(LOAD_BALANCE=yes)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=**serviceName**)))
0 голосов
/ 07 августа 2013

также вы можете использовать скан ip в oracle 11g r2 вместо ip узлов *: 1001

  testi=(DESCRIPTION = 
(ADDRESS_LIST= 
 (ADDRESS= (PROTOCOL = TCP)(HOST = scan-ip-or-name)(PORT = 1521))
 (FAILOVER = on)
 (LOAD_BALANCE = on)
)   
(CONNECT_DATA=
 (SERVICE_NAME = testi)
) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...