使用 RODBC 连接到 Oracle 数据库时遇到问题
Trouble connecting to Oracle database using RODBC
我最近从 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)
自从Windows10升级后,以上连接协议不再有效。具体来说,我收到以下错误:
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
其中returns连接数据库成功
我还可以使用 Oracle 的 SQL Developer Application 成功连接到数据库并从中查询。
所以我确信 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,它被分配给 "Oracle in OraClient11g_home1" 驱动程序。我测试了这个连接,发现它工作正常。我还使用了 RODBC 行:
odbcDataSources()
在RStudio中,发现数据源"myoracleDB"被识别。但是,当我尝试执行时:
channel<-
odbcConnect(dsn="myoracleDB",
uid='myusername',
pw='mypassword',
believeNRows=FALSE)
我仍然收到错误:
"TNS: Connect timeout occurred ODBC connection failed"
如果您 check out the docs,DSN=myoracleDB
告诉 RODBC 连接到 Windows DSN "myoracleDB",而 Dbq=myoracleDB
告诉 RODBC 连接到 TNSNAMES 条目"myoracleDB"。它们是解析数据库名称的两种不同方式。 tnsping
和 SQL 开发人员也都使用 TNSNAMES 来解析数据库。
所以我认为您的 DSN 可能在您重置时被删除了。您可以通过转到控制面板 > 管理工具 > 数据源 (ODBC) 来测试它。如果您的数据库在那里,您应该能够对其进行配置并单击测试连接以确保其正常工作。否则你可以在那里添加它,你原来的配置应该再次工作。
我最近从 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)
自从Windows10升级后,以上连接协议不再有效。具体来说,我收到以下错误:
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
其中returns连接数据库成功我还可以使用 Oracle 的 SQL Developer Application 成功连接到数据库并从中查询。
所以我确信 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,它被分配给 "Oracle in OraClient11g_home1" 驱动程序。我测试了这个连接,发现它工作正常。我还使用了 RODBC 行:
odbcDataSources()
在RStudio中,发现数据源"myoracleDB"被识别。但是,当我尝试执行时:
channel<-
odbcConnect(dsn="myoracleDB",
uid='myusername',
pw='mypassword',
believeNRows=FALSE)
我仍然收到错误:
"TNS: Connect timeout occurred ODBC connection failed"
如果您 check out the docs,DSN=myoracleDB
告诉 RODBC 连接到 Windows DSN "myoracleDB",而 Dbq=myoracleDB
告诉 RODBC 连接到 TNSNAMES 条目"myoracleDB"。它们是解析数据库名称的两种不同方式。 tnsping
和 SQL 开发人员也都使用 TNSNAMES 来解析数据库。
所以我认为您的 DSN 可能在您重置时被删除了。您可以通过转到控制面板 > 管理工具 > 数据源 (ODBC) 来测试它。如果您的数据库在那里,您应该能够对其进行配置并单击测试连接以确保其正常工作。否则你可以在那里添加它,你原来的配置应该再次工作。