如何在旧版本的DB2中使用IBM_DB?
我想用IBM DB2 ODBC驱动把Python连接到DB2版本9.1。
下面是我用来连接Python和DB2的代码。这个程序在IBM DB2的更新版本上可以正常工作。
import ibm_db
conn = ibm_db.connect("DSN=PDB2;DRIVER={IBM DB2 ODBC DRIVER};DATABASE=MDBASIS;PORT=1234;PROTOCOL=TCPIP;UID=username;PWD=password","","")
stmt = ibm_db.exe_immediate(conn,"create table egg (ID SMALLINT, NAME VARCHAR(30))")
stmt = ibm_db.exe_immediate(conn,"insert into egg (ID, NAME) VALUES('1','ok')")
state = ibm_db.exe_immediate("select * from egg")
result = ibm_db.fetch_both(state)
while result != False:
print 'id = %d and name = %s' %(result[0],result[1])
result = ibm_db.fetch_both(state)
stmt = ibm_db.exe_immediate(conn,"drop table egg")
我的问题是,我的IBM DB2版本是9.1,没有安装FixPack,每次尝试连接到IBM DB2 9.1时都会出现错误信息。
"[IBM][CLI Driver] CLI0133E Option type out of range. SQLSTATE=HY092 SQLCODE=-99999"
关于这个错误的解释在这个页面上写着:http://programmingzen.com/2008/02/08/essential-guide-to-the-ruby-driver-for-db2/is:“如果你遇到这个错误,通常意味着你使用的DB2版本太旧了。安装最新的FixPack或最新版本的DB2(目前是9.5)可以解决这个问题。”
但是我无法安装最新的FixPack或最新版本的DB2,也不能以任何方式修改现有的DB2安装。
问题
有没有办法在不修改数据库的情况下连接到DB2版本9.1,可能使用其他的工具而不是IBM_DB?
4 个回答
我觉得问题出在客户端的 ibm_db 驱动上。简单来说,你可以用任何语言连接到旧版本的数据库。试着换一个 db2 驱动。如果我是你,我会安装 db2 客户端,里面有几个驱动,都是放在 sqllib 文件夹里的。
我猜你的DB2客户端的版本比DB2服务器的版本要高,确保你在客户端机器上使用相同的版本。你可以尝试通过DB2控制中心远程连接和管理你的数据库,然后用Python尝试连接,代码如下:
conn = ibm_db.connect("MDBASIS", "username", "password")
据我所知,这样做会强制程序使用本地库,而不是ODBC。
你正在使用哪个版本的 ibm_db 呢?我用 ibm_db 1.0.4 连接 DB2 9.1 时没有遇到任何问题。
另外:根据你在连接字符串中指定了 DSN,我猜测你已经在客户端将数据库命名为 PDB2 了。你可以把连接的语句简化成:
conn = ibm_db.connect('PDB2','用户名','密码')
只有在你使用无 DSN 连接的时候(也就是数据库没有在本地机器上注册)才需要使用更长的形式(需要指定 DATABASE/PORT/HOST/UID/PWD)。