将新的odbc软件包与IP地址一起使用,而对Oracle服务器则不使用DSN

时间:2018-09-05 18:51:14

标签: r oracle odbc

只要我为Oracle服务器添加DSN,我就可以使odbc程序包在Windows中工作,但否则我将无法使其工作。即,在添加名为“ DummyDB”的DSN条目后,该条目仅包含IP地址和服务ID(当然,除了驱动程序之外),它的工作原理是:

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

但是,它的IP,驱动程序和服务ID与DSN条目中的ID完全相同,但不会(出于保密目的而将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。
  • 我尝试在tnsnames.ora和listener.ora中用路由器的IP(客户机系统代码指向的)和服务器的本地IP替换服务器的名称。我想我已经尝试过每种组合,每次都停止并启动整个服务器,并在启动后等待一分钟。实际上,使用这些组合中的大多数,DSN连接都会失败,并显示listener does not currently know of service requested in connect descriptor。同时,非DNS连接失败,我的好朋友“协议适配器错误”。
  • 我尝试在客户端位于同一LAN上并且在.ora文件中使用该本地IP的情况下,在客户端上使用服务器的本地IP。同样的错误。简单的IP ping工作。

出于某种原因,也许通过数据源管理员添加的DSN在这里很困难?在这一点上,最好能有人举一个例子,说明有人使用此软件包成功连接到任何(Oracle)服务器,但没有使用客户端DSN条目。

1 个答案:

答案 0 :(得分:1)

我遇到了一个相同的问题,并且尝试了所有相同的事情。我最终通过将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 connectivity to Oracle without tnsnames.ora