RODBC无法分配内存

时间:2015-06-01 18:54:06

标签: r unixodbc rodbc

简单R脚本

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:〜/软件&GT; Rscript ./RODBC_SIMPLE_TEST.r   
odbcQuery中的错误(channel,query,rows_at_time):
  'Calloc'无法分配内存(22816的18446744073709551616)   字节)

调用:sqlQuery - &gt; odbcQuery - &gt; .Call执行   停止
警告信息:
关闭未使用的RODBC手柄1

在R之外测试了odbc并且能够获得结果。我不确定问题出在哪里。我在想它是RODBC。

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

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

3 个答案:

答案 0 :(得分:7)

我遇到了类似的问题,并通过在连接中添加rows_at_time = 1来修复。

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

我在文档中也发现了这个模糊:

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

有几个错误已被报告为RODBC 1.3-0中的错误,实际上是ODBC驱动程序 可以通过设置rows_at_time = 1(以及该参数下的警告)来规避错误 一直在那里)。涉及的驱动程序是第三方Oracle驱动程序和旧SQL 服务器驱动程序。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我一直在处理大表时遇到这个问题,对于较小的表但不超过 10,000 行,效果很好。我正在使用: con <- odbcDriverConnect ("driver={SQL Server}; server=SERVERName; database=dBName; uid=Name; pwd=password")

我只是将驱动程序从“SQL Server”更改为“ODBC Driver 17 for SQL Server”,现在我可以处理任何大小的表。