首页 > 解决方案 > 使用 R 连接到 Oracle 数据库实例

问题描述

我尝试使用 Rstudio 连接到 Oracle 数据库,但我不知道该怎么做。我已经用 PowerBi 连接到数据库,所以我知道它可以访问(从我的 pc/ip)并且数据库工作正常,但是使用 RI 无法完成此操作。在问这个问题之前,我已经在网上搜索了几天,我对 R 或 SQL 并不陌生,但我对 Oracle 很熟悉。我尝试了各种软件包(DBI、odbc、RODBC 等),但仍然没有成功。我已经与数据库的管理员交谈,他们说我应该能够使用提供给我的以下信息进行连接;

服务器:xxx.xxx.xx.xx

端口:xxxx

实例:ORCL

用户:我的用户

密码:mypwd

当我使用 PowerBI 连接到数据库时,我的服务器名称是:服务器/实例,结合 uid 和 pwd 连接工作正常。

我(想我)得到的最接近的是使用'odbcDriverConnect()'函数。首先,我运行以下命令来检查安装了哪些驱动程序;

sort(unique(odbcListDrivers()[[1]]))

作为输出

"Oracle in OraClient12Home1" "Oracle in OraClient12Home2" "SQL Server"

stackoverflow 上的其他主题,建议以下站点检查在函数中使用哪个字符串:

https://www.connectionstrings.com/oracle/

我找不到我列出的驱动程序的特定驱动程序,但我在 OraClient11g_home1 中为 Oracle更改了一个,因为它似乎是最佳匹配,该字符串如下;

Driver={Oracle in OraClient11g_home1};Server=serverSID;Uid=myUsername; 密码=我的密码;

所以我用我的驱动程序替换了OraClient11g_home1 中的 Oracle,他们都给出了另一个错误;

con <- odbcDriverConnect("Driver={Oracle in OraClient12Home1};Server=xxx.xxx.xx.xx/orcl;Uid=xxx;Pwd=xxx;")


Warning messages:
1: In odbcDriverConnect("Driver={Oracle in OraClient12Home1};Server=xxx.xxx.xx.xx/orcl;Uid=xxx;Pwd=xxx;") :
  [RODBC] ERROR: state IM003, code 160, message Het opgegeven stuurprogramma kan niet worden geladen vanwege een systeemfout  126: Kan opgegeven module niet vinden. (Oracle in OraClient12Home1, C:\Program Files\Oracle\product\12.2.0\client_1\SQORA32.DLL).
2: In odbcDriverConnect("Driver={Oracle in OraClient12Home1};Server=xxx.xxx.xx.xx/orcl;Uid=xxx;Pwd=xxx;") :
  ODBC connection failed

错误是荷兰语,说明由于systemerror 126找不到驱动程序

下一个驱动程序给出另一个错误;

con <- odbcDriverConnect("Driver={Oracle in OraClient12Home2};Server=xxx.xxx.xx.xx/orcl;Uid=xxx;Pwd=xxx;")

Warning messages:
1: In odbcDriverConnect("Driver={Oracle in OraClient12Home2};Server=xxx.xxx.xx.xx/orcl;Uid=xxx;Pwd=xxx;") :
  [RODBC] ERROR: state HY000, code 12560, message [Oracle][ODBC][Ora]ORA-12560: TNS:protocol adapter error
2: In odbcDriverConnect("Driver={Oracle in OraClient12Home2};Server=xxx.xxx.xx.xx/orcl;Uid=xxx;Pwd=xxx;") :
  ODBC connection failed

最后一个驱动程序,是唯一需要几秒钟的驱动程序,表明它实际上正在尝试连接,但最终也给出了一个(其他)错误;

con <- odbcDriverConnect("Driver={SQL Server};Server=xxx.xxx.xx.xx/orcl;Uid=xxx;Pwd=xxx;")

Warning messages:
1: In odbcDriverConnect("Driver={SQL Server};Server=xxx.xxx.xx.xx/orcl;Uid=xxx;Pwd=xxx;") :
  [RODBC] ERROR: state 08001, code 17, message [Microsoft][ODBC SQL Server Driver][DBNETLIB]De SQL-server bestaat niet of de toegang tot de server is geweigerd.
2: In odbcDriverConnect("Driver={SQL Server};Server=xxx.xxx.xx.xx/orcl;Uid=xxx;Pwd=xxx;") :
  [RODBC] ERROR: state 01000, code 53, message [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).
3: In odbcDriverConnect("Driver={SQL Server};Server=xxx.xxx.xx.xx/orcl;Uid=xxx;Pwd=xxx;") :

说明服务器不存在或访问被拒绝。再一次,我知道它存在并且我被授予访问权限,因为它适用于 powerBi,所以我现在有点迷路了。我已经尝试了有和没有/orcl的服务器。如果有人对我所缺少的有任何线索,将不胜感激!

亲切的问候

标签: roracleodbc

解决方案


使用即时客户端和服务器的 IP 地址

con <- odbcDriverConnect("Driver={Oracle in OraClient12Home2};Dbq=server_ipaddress:1521/orcl;Uid=xxx;Pwd=xxx;")

或者如果您可以 ping 服务器

 con <- odbcDriverConnect("Driver={Oracle in OraClient12Home2};Dbq=server:1521/orcl;Uid=xxx;Pwd=xxx;")

其他选项,如果您在即时客户端主页中有 tnsnames.ora 并设置 tns_admin 变量,您可以在 tnsnames.ora 文件中使用服务名称

con <- odbcDriverConnect("Driver={Oracle in OraClient12Home2};Dbq=orcl;Uid=xxx;Pwd=xxx;")

在此处输入图像描述

PS:-我从来没有在 R 上工作过,只是下载了 R 和 R studio


推荐阅读