Использование нового пакета odbc с IP-адресом и без DSN с сервером Oracle - PullRequest
0 голосов
/ 05 сентября 2018

Я могу заставить пакет odbc работать в Windows, пока я добавляю DSN для своего сервера Oracle, но я не могу заставить его работать вообще. А именно, после добавления записи DSN с именем «DummyDB», которая содержит только IP-адрес и идентификатор службы (в дополнение к драйверу, конечно), это работает:

conn <- dbConnect(odbc(), 
                  DSN = "DummyDB",
                  UID = credentials$login,
                  PWD = credentials$pw,
                  Port = 1521)

и, тем не менее, с тем же IP, драйвером и идентификатором службы, что и в записи DSN, этого не происходит (IP x 'исключен для конфиденциальности):

conn <- dbConnect(odbc(), 
                  Driver = "Oracle in IC",
                  Host = "xx.xxx.xx.xxx",
                  SVC = "XE",
                  UID = credentials$login,
                  PWD = credentials$pw,
                  Port = 1521)

и это не работает:

conn <- dbConnect(odbc(), .connection_string = "Driver={Oracle in IC};Server=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xx.xxx.xx.xxx)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=xe)));Uid=xxx;Pwd=xxx;")

И, конечно, я пытался настроить все это в разные стороны. Несмотря ни на что, я получаю всегда загадочное:

nanodbc/nanodbc.cpp:950: HY000: [Oracle][ODBC][Ora]ORA-12560: TNS:protocol adapter error

Обязательные реквизиты:

  • Я использую VPN и переадресацию портов в программном обеспечении моего маршрутизатора, и они должны быть настроены достаточно правильно для успешного подключения DSN, указывая на WAN IP маршрутизатора.
  • Я попытался заменить имя моего сервера IP-адресом моего маршрутизатора (на который указывает код моей клиентской системы) и локальным IP-адресом моего сервера, как в tnsnames.ora, так и в listener.ora. Я думаю, что я попробовал каждую комбинацию там, останавливая и запуская весь сервер каждый раз, и ожидая минуту после запуска. С большинством этих комбинаций, на самом деле, соединение DSN завершается с listener does not currently know of service requested in connect descriptor. Между тем, не-DNS-соединение завершается с моим хорошим другом "ошибка адаптера протокола".
  • Я пытался использовать локальный IP-адрес сервера на моем клиенте, когда мой клиент находится в той же локальной сети, и с этим локальным IP-адресом в файлах .ora. Та же ошибка Работают простые IP-пинги.

Возможно, по какой-то причине DSN, добавленный через администратора источников данных, является здесь жестким требованием? На этом этапе было бы замечательно иметь любой пример успешного подключения к любому серверу (Oracle) с этим пакетом, но без использования записи DSN на стороне клиента.

1 Ответ

0 голосов
/ 20 февраля 2019

У меня была идентичная проблема, и я пробовал все то же самое. Я наконец решил, изменив аргумент Host на DBQ и добавив туда порт и имя службы:

vdw = DBI::dbConnect(odbc::odbc(), 
                     Driver= "My Oracle in Dir", # e.g. "Oracle in OraClient12Home1"
                     DBQ = "my-host-name.domain.org:1521/my-service-name",
                     Schema = "my_schema",
                     UID="my_userid",
                     PWD="my_password)

Надеюсь, это поможет! Это заняло у меня слишком много времени, чтобы понять ... Ответ был здесь: Подключение RODBC к Oracle без tnsnames.ora

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...