通过ODBC连接到DB2时出错
我在通过ODBC连接到DB2数据库时遇到问题。我在Windows系统上,并在ODBC管理器中配置了一个数据源名称。当我测试连接时,我得到Connection tested successfully.
。我还可以使用CLI和ODBC成功测试IBM DB2配置助手中的连接。通过ODBC连接到DB2时出错
我无法在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手册here
SQL1031N数据库目录不能被指定的文件系统上找到。
说明
系统数据库目录或本地数据库目录找不到。数据库尚未创建或未正确编目。 该命令无法处理。
用户响应
验证数据库与正确的路径规范创建。 Catalog Database命令有一个path参数,它指定数据库所在的目录。
SQLCODE:-1031
SQLSTATE:58031
以非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解决方案,因为这为我解决了许多其他问题。感谢您的协助! – Lenwood
看起来像没有为DB2驱动程序设置应用程序环境。尝试从DB2命令窗口运行R. – mustaccio
我不确定如何在DB2命令窗口中运行R,但您的评论很有帮助。我现在正在设定应用程序环境。 – Lenwood