我试图通过python连接一个on-prem DB2数据库,但是在过去的几天里没有成功。我希望社区能帮助我破译错误信息,并从他们的经验中提供帮助。在
我的目标是在我的windows7笔记本电脑上安装Python ibm_db库并连接到DB2实例
我拿不到ibm_数据库连接()识别已知良好的系统DSN或用户DSN的方法(我使用它们通过SQLServerManagementStudio(SSMS)连接到DB2)
我从不同的连接组合中得到以下错误(如下所示),但我没有找到任何参考,说明错误的含义,以及我可以做些什么来解决这个问题。我搜索并阅读了几十个IBM网站和文档,但是没有一个提到这个信息。 -->;我有一种感觉我错过了一些简单的步骤,但我不知道此时我不知道什么:)
系统配置说明:
Windows 7笔记本电脑
DB2 7.3版
Python 2.7.13 | Anaconda 4.4.0(64位)|(默认值,2017年5月11日,13:17:26)[MSC v.1500 64位(AMD64)]在win32上
安装的Python库版本似乎相关
pyOpenSSL(17.0.0)
我已经安装并运行了iSeries Navigator,其中包括iSeries ODBC驱动程序。它可以完美地连接到on prem DB2实例
我已经安装了DB2命令行界面,它在注册表和64位ODBC管理器驱动程序列表中添加了一个名为IBM DB2 ODBC DRIVER-C_clidriver的驱动程序
下面是我从iSeries ODBC驱动程序创建的一个文件DSN,它可以正常工作,但看起来与我用于IBM CLI驱动程序的DSN有很大不同:
[ODBC] DRIVER=iSeries访问ODBC驱动程序 数据库=数据库 PKG=QGPL/DEFAULT(IBM),2,0,1,0512 LANGUAGEID=简体中文 DFTPKGLIB=QGPL DBQ=QGPL 系统=DBSYS
首次尝试::指定完整DSN的基本连接:
>>> import ibm_db
>>> dsn = "DATABASE=dbname;HOSTNAME=hostname.domain;PORT=466;PROTOCOL=TCPIP"
>>> conn = ibm_db.connect(dsn,'mytextuid','password')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Exception: [IBM][CLI Driver] SQL10007N Message "0" could not be retrieved.
**Reason code: "6". SQLCODE=-1366**
下一步::添加一个名称与注册表中的驱动程序名称完全相同的驱动程序
^{pr2}$下一步::尝试使用不同格式的DSN,结合数据库、主机名和端口
>>> dsn = "DATABASE=Dbname:hostname.domain:466;PROTOCOL=TCPIP"
>>> conn = ibm_db.connect(dsn,'mytextuid','password')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Exception: [IBM][CLI Driver] SQL10007N Message "0" could not be retrieved.
**Reason code: "6". SQLCODE=-1024**
下一步:尝试一个已知良好的系统DSN,因为我在SSMS中使用它
>>> conn = ibm_db.connect('DSN=SYSTEM_DB2_DSN','mytextuid','password')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Exception: [IBM][CLI Driver] SQL10007N Message "0" could not be retrieved.
**Reason code: "6". SQLCODE=-1013**
下一步:尝试使用与上述配置相同的用户DSN
>>> conn = ibm_db.connect("DSN=USER_DB2_DSN","mytextuid","password")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Exception: [IBM][CLI Driver]
**SQLSTATE=HY009 SQLCODE=-99999**
Next::在ODBC系统DSN上启用跟踪(结果:ODBC Admin挂起在连接上)
C:\clidriver\db2trace.log>cat p8516t4948.cli
[ Process: 8516, Thread: 4948 ]
[ Date & Time: 02/27/2018 15:28:34.282526 ]
[ Product: QDB2/NT64 DB2 v11.1.2021.1452 ]
[ Level Identifier: 0203010F ]
[ CLI Driver Version: 10.01.0000 ]
[ Informational Tokens: "DB2 v11.1.2021.1452","s1709221349","DYN1709221349W
IN64","Fixpack 2a" ]
[ Install Path: C:\clidriver ]
[ db2cli.ini Location: C:\Users\mytextuid\db2cli.ini ]
[ db2cli.ini Location2: C:\ProgramData\IBM\DB2\C_clidriver\cfg\db2cli.ini ]
[ db2dsdriver.cfg Location: C:\ProgramData\IBM\DB2\C_clidriver\cfg\db2dsdriver.
cfg ]
[ CLI Driver Type: IBM Data Server Driver For ODBC and CLI ]
[0000008516 0000004948] [02/27/2018 15:28:34.283197] SQLAllocEnv(phEnv=&0000000000392b00 )
[0000008516 0000004948] [02/27/2018 15:28:34.284702] ---> Time elapsed - 0 seconds
[0000008516 0000004948] [02/27/2018 15:28:34.299819] SQLAllocEnv( phEnv=0:1 )
[0000008516 0000004948] [02/27/2018 15:28:34.301458] <--- SQL_SUCCESS Time elapsed - +1.826100E-002 seconds
[0000008516 0000004948] [02/27/2018 15:28:34.302199] SQLAllocConnect( hEnv=0:1,phDbc=&0000000000392b08 )
[0000008516 0000004948] [02/27/2018 15:28:34.304124] ---> Time elapsed - +7.410000E-004 seconds
[0000008516 0000004948] [02/27/2018 15:28:34.305055] SQLAllocConnect( phDbc=0:1)
[0000008516 0000004948] [02/27/2018 15:28:34.305902] <--- SQL_SUCCESS Time
elapsed - +3.703000E-003 seconds
[0000008516 0000004948] [02/27/2018 15:28:34.306285] SQLDriverConnect( hDbc=0:1,hwnd=0:0,szConnStrIn="DSN=DSNNAME;UID=mytextuid;PWD=********;AUTOCOMMIT=0;CONNECTTYPE=1;", cbConnStrIn=-3, szConnStrOut=&0000000000103230, cbConnStrOutMax=256,pcbConnStrOut=&00000000001031f6,fDriverCompletion=SQL_DRIVER_NOPROMPT )
[0000008516 0000004948] [02/27/2018 15:28:34.308920] ---> Time elapsed - +3.830000E-004 seconds
sqlccconnr( timeout - +0.000000E+000, protocol - 0x03 )
Next::正在监视c:\ProgramData\IBM\DB2\c\u clidriver\DB2诊断日志
我在ODBC管理中测试DSN的连接,这是我收到的条目。。。注意:下面的“DB”、APPID和主机名已被混淆。。。我不知道为什么使用这个司机需要驾照,即使这是问题所在
2018-02-27-16.29.43.560000-480 E27622F847 LEVEL: Error
PID : 13452 TID : 4948 PROC : odbcad32.exe
INSTANCE: NODE : 000 DB : DBNAME
APPID : my.ipa.ddr.ess.65253.180228002943
HOSTNAME: ${COMPUTERNAME}
EDUID : 4948
FUNCTION: DB2 UDB, Connection Manager, sqleuPerformServerActivationCheck, probe:110
MESSAGE : ADM12008C The product "IBM Data Server Driver For ODBC and CLI" does
not have a valid license key installed and the evaluation period has
expired. Functions specific to this product are not enabled. If you
have licensed this product, ensure the license key is properly
installed. You can install the license using the db2licm command. The
license file can be obtained from your licensed product CD.
试试这个(Python3和Python2):
相关问题 更多 >
编程相关推荐