r - 使用 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的服务器。如果有人对我所缺少的有任何线索,将不胜感激!
亲切的问候
解决方案
使用即时客户端和服务器的 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
推荐阅读
- javascript - 使用 passport.authenticate('local') 库无需客户端调用即可生成 Cookie
- java - 如何递归扩展博弈树
- javascript - 数组迭代:将 forEach 循环重写为 for 循环
- java - 为什么我定义的类不能在 android studio 中正确读取并显示错误?
- reactjs - 重写和重定向配置以在 AWS amplify 上使用 react-strapi 部署反应应用程序?
- javascript - 使用 Javascript 操作对象并合并相似数据
- javascript - 使用ajax打印多数据
- javascript - 优化代码:有没有更好的方法将一个(较短的)数组映射到 Javascript 中的另一个(较长的)对象数组?
- python - 如何在列表中生成圆的坐标
- python-3.x - 使用 for 循环向 matplotlib 中的子图添加唯一标题