只要我为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
必填项:
listener does not currently know of service requested in connect descriptor
。同时,非DNS连接失败,我的好朋友“协议适配器错误”。出于某种原因,也许通过数据源管理员添加的DSN在这里很困难?在这一点上,最好能有人举一个例子,说明有人使用此软件包成功连接到任何(Oracle)服务器,但没有使用客户端DSN条目。
答案 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