使用 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

另外两个观察结果与此相关:

  1. 我使用Windows命令行执行tnsping myoracleDB其中returns连接数据库成功

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

所以我确信 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,它被分配给 "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 docsDSN=myoracleDB 告诉 RODBC 连接到 Windows DSN "myoracleDB",而 Dbq=myoracleDB 告诉 RODBC 连接到 TNSNAMES 条目"myoracleDB"。它们是解析数据库名称的两种不同方式。 tnsping 和 SQL 开发人员也都使用 TNSNAMES 来解析数据库。

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