使用RODBC连接到Oracle数据库时出现问题

时间:2019-08-08 20:08:22

标签: r database oracle 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)

自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

另外两个相关的观察结果:

  1. 我使用Windows命令行执行tnsping myoracleDB,该操作将成功返回数据库连接

  2. 我还可以使用Oracle的SQL Developer应用程序成功连接到数据库并从数据库中查询。

因此,我对Oracle客户端和ODBC数据源的正确设置充满信心。

有趣的是,如果使用以下代码,我可以使用RODBC库连接到数据库:

    mycon = odbcDriverConnect("Driver={Oracle in OraClient11g_home1}; 
    Dbq=myoracleDB; Uid=myusername; Pwd=mypassword;",
    believeNRows=FALSE)

我对社区的问题是:

  1. 这个新的连接协议有效(对此我感到高兴)。但是,由于无法真正理解为什么为什么以前无法使用的方法不再有效,所以我担心自己可能会忽略一些可能真正困扰我的潜在问题。

我发现以下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连接失败”

1 个答案:

答案 0 :(得分:1)

如果您check out the docsDSN=myoracleDB告诉RODBC连接到Windows DSN“ myoracleDB”,而Dbq=myoracleDB告诉RODBC连接到TNSNAMES条目“ myoracleDB”。它们是解析数据库名称的两种不同方法。 tnsping和SQL Developer也都使用TNSNAMES来解析数据库。

因此,我认为重置时可能会删除您的DSN。您可以通过转到控制面板>管理工具>数据源(ODBC)对其进行测试。如果您的数据库在那里,则应该能够对其进行配置,然后单击“测试连接”以确保其正常工作。否则,您可以在此处添加它,并且原始配置应该可以再次使用。