我可以在Windows中使用odbc
包,只要我为我的Oracle服务器添加一个DSN,但我无法让它工作。也就是说,在添加一个名为“DummyDB”的DSN条目后,它只包含一个IP地址和服务ID(当然除了驱动程序之外),这有效:
conn <- dbConnect(odbc(),
DSN = "DummyDB",
UID = credentials$login,
PWD = credentials$pw,
Port = 1521)
然而,与DSN条目中完全相同的IP,驱动程序和服务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条目,则会很高兴。
我有一个相同的问题,我尝试了所有相同的事情。我最终通过将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