首页 文章

通过ODBC连接到DB2时出错

提问于
浏览
0

我'm having trouble connecting to a DB2 database via ODBC. I' m在Windows系统上,并在ODBC管理器中配置了数据源名称 . 当我测试连接时,我得到 Connection tested successfully. . 我还可以使用CLI和ODBC在IBM的DB2 Configuration Assistant中成功测试连接 .

我无法在R内连接 . 我已经尝试了RODBC和odbc包,结果是一样的 . 我的目的是执行一个简单的查询来验证连接 . 当我运行以下R脚本时,我收到一个错误 . 这是我的伪代码 .

library('RODBC')

myQuery <- 'SELECT COLUMN1, COLUMN2 FROM DATABASE.TABLE FETCH FIRST 10 ROWS ONLY;'

cnxn <- odbcConnect('myDSN')

data <- sqlQuery(channel=cnxn, query=myQuery)

odbcCloseAll()

这是我得到的错误 .

Error in sqlQuery(channel = cnxn, query = myQuery) : 
  first argument is not an open RODBC channel
In addition: Warning messages:
1: In RODBC::odbcDriverConnect("DSN=myDSN") :
  [RODBC] ERROR: state 58031, code -1031, message [IBM][CLI Driver] SQL1031N  The database directory cannot be found on the indicated file system.  SQLSTATE=58031
2: In RODBC::odbcDriverConnect("DSN=myDSN") : ODBC connection failed

我通过实验了解到我的脚本永远不会发送查询 . odbcConnect命令会生成此错误 .

我无权访问服务器本身,只能访问数据库 . 有什么我可以做的或尝试自己解决这个问题,而不必经过支持吗?

EDIT:

我现在cataloged my database,测试连接在3个位置成功,ODBC数据源管理员,Db2命令行和Db2配置助手 . 我知道有's no issue with permissions, as I can execute queries via IBM Query Management Facility. I believe this is an issue with either my driver or my system'的PATH声明,但我不确定如何追踪它 .

2 回答

  • 1

    根据DB2手册here

    SQL1031N The database directory cannot be found on the indicated file system.

    Explanation

    找不到系统数据库目录或本地数据库目录 . 尚未创建数据库或未正确编目 . 该命令无法处理 .

    User response

    验证是否使用正确的路径规范创建了数据库 . Catalog Database命令具有path参数,该参数指定数据库所在的目录 .

    sqlcode:-1031
    sqlstate:58031

  • 1

    采用非RODBC方法,以下方法适用于连接R和DB2 . 假设您知道下面的所有信息,您将需要下载IBM DB2 jar文件并在本例中将其定位在我的机器上名为“IBM”的文件夹中 .

    注意:有两种类型的可用jar文件:db2jcc.jar和db2jcc4.jar . 以下示例使用db2jcc.jar .

    library(rJava)
    library(RJDBC)
    library(DBI)
    
    #Enter the values for you database connection
    dsn_driver = "com.ibm.db2.jcc.DB2Driver"
    dsn_database = ""                   # e.g. "BLUDB"
    dsn_hostname = ""                   # e.g.: "awh-yp-small03.services.dal.bluemix.net"
    dsn_port = ""                       # e.g. "50000" 
    dsn_protocol = "TCPIP"              # i.e. "TCPIP"
    dsn_uid = ""                        # e.g. "dash104434"
    dsn_pwd = ""                        # e.g. "7dBZ39xN6$o0JiX!m"
    
    jcc = JDBC("com.ibm.db2.jcc.DB2Driver", "C:/Program Files/IBM/SQLLIB/java/db2jcc.jar");
    jdbc_path = paste("jdbc:db2://",  dsn_hostname, ":", dsn_port, "/", dsn_database, sep="");
    conn = dbConnect(jcc, jdbc_path, user=dsn_uid, password=dsn_pwd)
    
    query = "SELECT * 
             FROM Table
             FETCH FIRST 10 ROWS ONLY";
    rs = dbSendQuery(conn, query);
    df = fetch(rs, -1);
    df
    

相关问题