尝试通过unixODBC连接Cisco UCCX Informix数据库失败求助
问题:Informix ODBC驱动连接Cisco UCCX数据库失败排查
已安装IBM Informix SDK(路径/opt/IBM/Informix_Client-SDK),尝试通过ODBC连接Cisco UCCX数据库,以下是配置细节与报错情况:
1. unixODBC环境信息
执行odbcinst -j输出:
unixODBC 2.3.9 DRIVERS............: /etc/odbcinst.ini SYSTEM DATA SOURCES: /etc/odbc.ini FILE DATA SOURCES..: /etc/ODBCDataSources USER DATA SOURCES..: /home/alexniko/.odbc.ini SQLULEN Size.......: 8 SQLLEN Size........: 8 SQLSETPOSIROW Size.: 8
2. ODBC配置文件
/etc/odbc.ini 配置
[ODBC Data Sources] uccx uccx2 [uccx] DRIVER={IBM INFORMIX ODBC DRIVER (64-bit)} UID=uccxhruser PWD=TrebuSHet{}123 DATABASE=db_cra HOST=uccx-01.fccps.local SERVER=uccx_01_uccx SERVICE=1504 PROTOCOL=onsoctcp CLIENT_LOCALE=en_US.UTF8 DB_LOCALE=en_US.UTF8 [uccx2] DRIVER={IBM INFORMIX ODBC DRIVER 2 (64-bit)} UID=uccxhruser PWD=TrebuShet{}123 DATABASE=db_cra HOST=uccx-02.fccps.local SERVER=uccx_02_uccx SERVICE=1504 PROTOCOL=onsoctcp CLIENT_LOCALE=en_US.UTF8 DB_LOCALE=en_US.UTF8
/etc/odbcinst.ini 配置
[IBM INFORMIX ODBC DRIVER (64-bit)] Driver=/opt/IBM/Informix_Client-SDK/lib/cli/iclis09b.so Description=IBM INFORMIX ODBC DRIVER UID=uccxhruser PWD=TrebuShet{}123 DATABASE=db_cra HOST=uccx-01.fccps.local SERVER=uccx_01_uccx SERVICE=1504 PROTOCOL=onsoctcp CLIENT_LOCALE=en_US.UTF8 DB_LOCALE=en_US.UTF8 [IBM INFORMIX ODBC DRIVER 2 (64-bit)] Driver=/opt/IBM/Informix_Client-SDK/lib/cli/iclis09b.so Description=IBM INFORMIX ODBC DRIVER UID=uccxhruser PWD=TrebuShet{}123 DATABASE=db_cra HOST=uccx-02.fccps.local SERVER=uccx_02_uccx SERVICE=1504 PROTOCOL=onsoctcp CLIENT_LOCALE=en_US.UTF8 DB_LOCALE=en_US.UTF8
3. 前置检查
执行ldd -v /opt/IBM/Informix_Client-SDK/lib/cli/iclis09b.so无报错,驱动依赖库齐全。
4. Python连接字符串
SERVICE=1504;PROTOCOL=onsoctcp; CLIENT_LOCALE=en_US.UTF8;DB_LOCALE=en_US.UTF8; DRIVER=IBM INFORMIX ODBC DRIVER (64-bit); UID=uccxhruser;PWD=TrebuShet{}123; DATABASE=db_cra; HOST=uccx-01.fccps.local; SERVER=uccx_01_uccx;
5. 报错信息
- Python连接报错:
Can't open lib '/opt/IBM/Informix_Client-SDK/lib/cli/iclis09b.so' : file not found (0) (SQLDriverConnect)
- 使用
isql -v uccx测试驱动报错:
[IM002][unixODBC][Driver Manager]Data source name not found and no default driver specified [ISQL]ERROR: Could not SQLConnect
问题排查与修复步骤
1. 修正odbcinst.ini配置错误
odbcinst.ini是驱动定义文件,不应包含数据库连接的具体参数(UID、PWD、DATABASE等),这些参数需放在odbc.ini的数据源配置中。修改后的odbcinst.ini:
[IBM INFORMIX ODBC DRIVER (64-bit)] Driver=/opt/IBM/Informix_Client-SDK/lib/cli/iclis09b.so Description=IBM INFORMIX ODBC DRIVER (64-bit) Setup=/opt/IBM/Informix_Client-SDK/lib/cli/iclis09b.so FileUsage=1 [IBM INFORMIX ODBC DRIVER 2 (64-bit)] Driver=/opt/IBM/Informix_Client-SDK/lib/cli/iclis09b.so Description=IBM INFORMIX ODBC DRIVER 2 (64-bit) Setup=/opt/IBM/Informix_Client-SDK/lib/cli/iclis09b.so FileUsage=1
2. 确保配置文件权限正确
检查/etc/odbc.ini和/etc/odbcinst.ini的读取权限,确保当前用户可访问:
sudo chmod 644 /etc/odbc.ini /etc/odbcinst.ini
3. 配置Informix环境变量
Informix驱动依赖环境变量加载,在用户shell配置文件(/.bashrc或/.zshrc)中添加:
export INFORMIXDIR=/opt/IBM/Informix_Client-SDK export LD_LIBRARY_PATH=$INFORMIXDIR/lib:$INFORMIXDIR/lib/cli:$INFORMIXDIR/lib/esql:$LD_LIBRARY_PATH export PATH=$INFORMIXDIR/bin:$PATH
执行source ~/.bashrc使配置生效。
4. 修正odbc.ini驱动名称格式
驱动名称需与odbcinst.ini中的驱动段名完全一致,且移除大括号(部分unixODBC版本兼容不佳):
[uccx] DRIVER=IBM INFORMIX ODBC DRIVER (64-bit) # 其余参数保留不变 [uccx2] DRIVER=IBM INFORMIX ODBC DRIVER 2 (64-bit) # 其余参数保留不变
5. 测试连接
- 验证驱动是否被识别:
odbcinst -q -d
- 测试数据源连接:
isql -v uccx
- 若仍报错,直接用驱动参数连接:
isql -v -d "IBM INFORMIX ODBC DRIVER (64-bit)" "uccxhruser" "TrebuSHet{}123" "SERVER=uccx_01_uccx;DATABASE=db_cra;HOST=uccx-01.fccps.local;SERVICE=1504;PROTOCOL=onsoctcp;CLIENT_LOCALE=en_US.UTF8;DB_LOCALE=en_US.UTF8"
6. Python连接优化
确保pyodbc库为64位版本,与驱动、unixODBC位数一致;连接字符串避免不必要换行,保持参数格式正确:
conn_str = ( "DRIVER=IBM INFORMIX ODBC DRIVER (64-bit);" "UID=uccxhruser;" "PWD=TrebuSHet{}123;" "DATABASE=db_cra;" "HOST=uccx-01.fccps.local;" "SERVER=uccx_01_uccx;" "SERVICE=1504;" "PROTOCOL=onsoctcp;" "CLIENT_LOCALE=en_US.UTF8;" "DB_LOCALE=en_US.UTF8" )
内容的提问来源于stack exchange,提问作者Alexey Nikolaev
相关产品推荐
相关产品推荐

