2017-09-13 47 views
0

我们安装了Data Studio 4.1.0.0 Client来访问存储在DB2中的数据。我们在装有Windows 7 64位的PC上安装了DB2 11.1 64bit。如何从R连接DB2?

我需要从64位R.连接到DB2数据

我们尝试了以下

library (RODBC) 

driver.name <- "{IBM DB2 ODBC DRIVER}" 
db.name <- "SBXSHRD" 
host.name <- "XX.XXX.X.XX" 
port <- "60012" 
user.name <- "X20XX4" 
pwd <- "SXXXXX01" 

#Connection String 
con.text <- paste ("DRIVER =", driver.name, 
                   "; Database =", db.name, 
                   "; Hostname =", host.name, 
                   "; Port =", port, 
                   "; PROTOCOL = TCPIP", 
                   "; UID =", user.name, 
                   "; PWD =", pwd, sep = "") 

#Connect to DB2 
con1 <- odbcDriverConnect (con.text) 

top <- sqlQuery (con1, 
               "SELECT * 
               FROM ODS_CANALES_LINK.VW_OP_D_TRANSACCIONCANAL 
               where CODMES_PROC = 201708 
               FETCH FIRST 3 ROW ONLY 
               ", 
               errors = FALSE) 

但我得到r中

> con1 <- odbcDriverConnect(con.text) 
Warning messages: 
1: In odbcDriverConnect(con.text) : 
    [RODBC] ERROR: state IM004, code 0, message [Microsoft][Administrador de controladores ODBC] Error de SQLAllocHandle del controlador en SQL_HANDLE_ENV 
2: In odbcDriverConnect(con.text) : ODBC connection failed 

这里的详细结果如下我们拥有的DB​​2以及我们正在做什么的快照R

enter image description here

enter image description here

+0

在你的形象不符合您要求使用(11.1)的DB2版本的DB2服务级别(10.5.0.8)。 – Wieland

+0

您是否尝试了IBM页面上的建议http://www-01.ibm.com/support/docview.wss?uid=swg21229860 – mao

回答

0

RJDBC工作得很好。但是......有一次,在完成docker镜像的重建之后,我得到了所有结果集的更改列名称,因为它们将名称从jdbc函数getColumnName更改为getColumnLabel。

https://github.com/s-/RJDBC/commit/7f1c1eec25ed90ec5ed71141189b816e2a3c2657

library(RJDBC) 
CONSTR <- "jdbc:db2://hostname:446/database" 
jcc = JDBC("com.ibm.db2.jcc.DB2Driver", "db2jcc4.jar") 

connect <- function() { 
    dbConnect(jcc, CONSTR, user="scott", password="tiger") 
} 

dept <- function() { 
    con <- connect() 
    sql <- "SELECT DEPTNO, DEPTNAME FROM DSN8710.dept"  
    rs <- dbSendQuery(con, sql) 
    x <- dbFetch(rs) 
    dbClearResult(rs) 
    # change column names, because the names are not stable! 
    names(x) <- c('DEPTNO', 'DEPTNAME') 
    dbDisconnect(con) 
    x 
}