通过 ODBC 连接到 DB2 时出错
Error connecting to DB2 via ODBC
我在通过 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 查询管理工具执行查询。我相信这是我的驱动程序或系统的 PATH 语句的问题,但我不确定如何追查。
根据 DB2 手册here
SQL1031N 在指示的文件系统上找不到数据库目录。
说明
找不到系统数据库目录或本地数据库目录。数据库尚未创建或未正确编目。
无法处理命令。
用户响应
验证数据库是使用正确的路径规范创建的。 Catalog Database 命令有一个路径参数,它指定数据库所在的目录。
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 连接到 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 查询管理工具执行查询。我相信这是我的驱动程序或系统的 PATH 语句的问题,但我不确定如何追查。
根据 DB2 手册here
SQL1031N 在指示的文件系统上找不到数据库目录。
说明
找不到系统数据库目录或本地数据库目录。数据库尚未创建或未正确编目。 无法处理命令。
用户响应
验证数据库是使用正确的路径规范创建的。 Catalog Database 命令有一个路径参数,它指定数据库所在的目录。
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