2015-06-01 34 views
2

簡易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

回答

0

你連接到什麼類型的數據庫體系結構?如果它與您正在使用的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

5

我有一個類似的問題,並通過添加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