【问题标题】:Error connecting to DB2 via ODBC通过 ODBC 连接到 DB2 时出错
【发布时间】:2017-12-10 09:22:24
【问题描述】:

我无法通过 ODBC 连接到 DB2 数据库。我在 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 命令中生成。

我无法访问服务器本身,只能访问数据库。有没有什么我可以做或尝试自己解决这个问题,而无需通过支持?

编辑:

我现在有cataloged my database,并且在 3 个地方测试连接成功,ODBC 数据源管理员、Db2 命令行和 Db2 配置助手。我知道权限没有问题,因为我可以通过 IBM Query Management Facility 执行查询。我认为这是我的驱动程序或系统的 PATH 语句的问题,但我不确定如何追踪。

【问题讨论】:

  • 似乎没有为 DB2 驱动程序设置应用程序环境。尝试从 DB2 命令窗口运行 R。
  • 我不确定如何在 DB2 命令窗口中运行 R,但您的评论很有帮助。我现在正朝着设置应用环境的方向前进。

标签: r db2 odbc rodbc dsn


【解决方案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

【讨论】:

  • 这对我有用,我可以执行查询。我坚持使用 ODBC 解决方案,因为它为我解决了许多其他问题。感谢您的帮助!
【解决方案2】:

根据 DB2 手册here

SQL1031N 在指定的文件系统上找不到数据库目录。

说明

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

用户反应

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

sqlcode:-1031
sqlstate: 58031

【讨论】:

  • 我已经按照here的说明对我的数据库进行了编目,后续测试连接成功。在 R 中,我仍然遇到同样的错误。
  • 我终于解决了。您链接的文档会导致解决方案。我必须将我的 Win7 用户 ID 添加到 DB2ADMNS 和 DB2USERS 组。快速重启后,我成功获取了数据。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
相关资源
最近更新 更多