RODBC无法分配存储器

问题描述:

简易R脚本RODBC无法分配存储器

library(RODBC) 
odbChannel <- odbcConnect(dsn = "CTPRD03", uid = "BD_RPT_RO", pwd = "****") 
df.test <- sqlQuery(channel = odbChannel, query = "select * from DUAL;") 
df.test 
close(odbChannel) 

产生以下错误

光泽@ narc07shiny1dev:〜/软件> RSCRIPT ./RODBC_SIMPLE_TEST.r
错误odbcQuery(信道,查询,rows_at_time):
'Calloc'无法分配内存(18446744073709551616的22816 字节)

个呼叫:的SQLQuery - > odbcQuery - > .CALL
执行 停止
警告消息:
关闭不使用的RODBC处理1

的R外ODBC测试,能得到的结果。我不确定问题出在哪里。我认为这是RODBC。

已经卸载RODBC并重新安装了RODBC软件包,并且在此过程中没有错误,但仍然有相同的结果。

发现一个案例在那里有同样的问题,但没有任何解决方案。 什么是隔离问题的后续步骤,有什么建议?

+0

你使用32位还是64位R? –

+0

看起来确实可能存在x86和x64 ODBC和R的问题unixODBC-32bit-2.2.12-198.17 R版本3.1.2(2014-10-31) - “南瓜头盔” Copyright(C )2014 R统计计算基金会 平台:x86_64-suse-linux-gnu(64位) – klaasb01

你连接到什么类型的数据库体系结构?如果它与您正在使用的R的版本不匹配,则查询将不会运行。例如,如果您使用的是64位R,但您尝试连接到Microsoft Access 2007或更早版本的数据库(即32位),则无法运行查询。

如果您使用的是R Studio,请转到'工具'菜单,然后选择'全局选项',您可以更改您使用的R的版本以匹配数据库的版本。

+0

目标数据库是Windows x86上的Oracle 11.2.0.4。在这种情况下,我们只是在SUSE Enterprise Linux x64上本地测试R,最终我们将使用Shiny Server Pro。使用isql测试unixODBC工作正常。我将尝试使用在x64 SUSE上运行的Oracle实例,以查看是否得到相同的错误。 – klaasb01

+0

使用运行在SUSE上的Oracle x64 11.2.0.4进行了测试。得到了同样的错误信息 – klaasb01

我有一个类似的问题,并通过添加rows_at_time = 1到连接修复。

odbChannel <- odbcConnect(dsn = "CTPRD03", uid = "BD_RPT_RO", pwd = "****", rows_at_time = 1) 

我也发现了这个Blurb的文档中:已报告为RODBC 1.3-0中存在错误,实际上是ODBC驱动程序,可以规避 错误

https://cran.r-project.org/web/packages/RODBC/RODBC.pdf

几个错误通过设置rows_at_time = 1(并且该参数 下的警告一直存在)。涉及的驱动程序是第三方Oracle驱动程序和旧的SQL服务器驱动程序。

+0

只是尝试了你的建议,不幸的是它并没有解决问题。我犯了同样的错误。我们已经转向使用JDBC,它对我们来说工作得很好。 – klaasb01

+0

这很好理解。在我的情况下,它适用于SQL,我没有尝试Oracle。 –

+0

这对我有效...使用odbcDriverConnect(...,rows_at_time = 1)。尽管我收到了一条警告,我不知道它是否与此相关:警告信息: In .Internal(sys.call(which)):关闭未使用的RODBC句柄2 – val