我最近从Windows 7升级到Windows 10,不得不重置一些远程数据库连接。以前,我已经使用Oracle 11g客户端和RODBC相当成功地连接到Oracle数据库。
library(RODBC)
channel<-
odbcConnect(dsn="myoracleDB",
uid='myusername',
pw='mypassword',
believeNRows=FALSE)
result<- sqlQuery(channel,"select * from schema_name.table_name")
close(channel)
自Windows 10升级以来,上述连接协议不再起作用。具体来说,我收到以下错误:
channel<-
odbcConnect(dsn="myoracleDB",
uid='myusername',
pw='mypassword',
believeNRows=FALSE)
Warning messages:
1: In RODBC::odbcDriverConnect("DSN=myoracleDB;UID=myusername;
PWD=mypassword",:
[RODBC] ERROR: state HY000, code 12170, message [Oracle][ODBC]
[Ora]ORA-12170: TNS:Connect timeout occurred
2: In RODBC::odbcDriverConnect("DSN=myoracleDB;UID=myusername;
PWD=mypassword",:ODBC connection failed
另外两个相关的观察结果:
我使用Windows命令行执行tnsping myoracleDB
,该操作将成功返回数据库连接
我还可以使用Oracle的SQL Developer应用程序成功连接到数据库并从数据库中查询。
因此,我对Oracle客户端和ODBC数据源的正确设置充满信心。
有趣的是,如果使用以下代码,我可以使用RODBC库连接到数据库:
mycon = odbcDriverConnect("Driver={Oracle in OraClient11g_home1};
Dbq=myoracleDB; Uid=myusername; Pwd=mypassword;",
believeNRows=FALSE)
我对社区的问题是:
我发现以下SO线程很有用,尽管它们都不能真正解决我的问题:
Failure to connect to odbc database in R
Connect to ORACLE via R, using the info in sql developer
更新: 我已经访问了Windows ODBC 64位菜单,并验证了我确实有一个名为“ myoracleDB”的DSN,该DSN已分配给“ OraClient11g_home1中的Oracle”驱动程序。我已经测试了此连接,发现它工作正常。我还使用了RODBC行:
odbcDataSources()
在RStudio中,发现数据源“ myoracleDB”已被识别。但是,当我尝试执行时:
channel<-
odbcConnect(dsn="myoracleDB",
uid='myusername',
pw='mypassword',
believeNRows=FALSE)
我仍然收到错误:
“ TNS:连接超时发生ODBC连接失败”
答案 0 :(得分:1)
如果您check out the docs,DSN=myoracleDB
告诉RODBC连接到Windows DSN“ myoracleDB”,而Dbq=myoracleDB
告诉RODBC连接到TNSNAMES条目“ myoracleDB”。它们是解析数据库名称的两种不同方法。 tnsping
和SQL Developer也都使用TNSNAMES来解析数据库。
因此,我认为重置时可能会删除您的DSN。您可以通过转到控制面板>管理工具>数据源(ODBC)对其进行测试。如果您的数据库在那里,则应该能够对其进行配置,然后单击“测试连接”以确保其正常工作。否则,您可以在此处添加它,并且原始配置应该可以再次使用。