部署在IIS 8的DRF后端连接Informix遇SQLCODE=-11048错误求助
解决Informix ODBC驱动加载翻译库失败(SQLCODE=-11048)的思路
问题背景
在Windows Server 2012 R2的IIS 8上部署的Django REST Framework后端连接Informix数据库时,一直报以下错误:
[Informix][Informix ODBC Driver]Unable to load translation shared library (DLL). SQLCODE=-11048
已知环境信息
- 服务器长期装了两个版本的Informix,这个错误是近期才出现的
- 故障发生前只装了HTTP Platform Handler 1.2和Application Request Routing 3.0
- IIS已启用代理功能,且连接字符串配置没问题:
SERVER=server_name;DATABASE=db_name;HOST=ip_address;SERVICE=port;Protocol=used_protocol;UID=user_name;PWD=password;
已尝试但无效的操作
- 禁用IIS代理,问题没解决
- 尝试卸载HTTP Platform Handler,卸不掉
- 已经确认环境变量和
setnet32里的INFORMIXDIR配置正确 - 用ConnectTestDemo测试,只有一个SDK版本能正常连接,另一个也报同样的错
解决思路
1. 检查Informix翻译库的路径和权限
- 找到报错的Informix版本对应的翻译库(一般在
%INFORMIXDIR%\lib\cli\目录下,比如icudt*.dll、icuin*.dll、icuuc*.dll这类文件),确认这些文件存在且没损坏 - 给IIS应用程序池对应的身份(比如
IIS AppPool\你的应用池名称)授予这些DLL文件及所在目录的读取和执行权限,避免因为权限不够加载失败
2. 排查多Informix版本的环境变量冲突
- 虽然
INFORMIXDIR配置对了,但要检查系统PATH环境变量里,两个Informix版本的bin和lib目录的顺序。确保当前应用用的Informix版本的路径排在另一个版本前面,防止加载错依赖库 - 可以在IIS应用程序池的高级设置里,添加自定义环境变量,强制指定当前应用要用的
INFORMIXDIR和PATH,覆盖系统级的环境变量,避免版本冲突
3. 检查HTTP Platform Handler/ARR安装带来的依赖干扰
- 就算卸不掉HTTP Platform Handler,试试修复组件:打开控制面板-程序和功能,找到HTTP Platform Handler 1.2,右键选更改-修复,修复完重启IIS
- 检查ARR的代理配置有没有改IIS的进程环境,比如
applicationHost.config里有没有影响进程PATH的配置,可暂时注释ARR相关配置后重启IIS测试(测试完记得恢复)
4. 验证ODBC驱动的版本匹配
- 确认当前应用用的ODBC驱动版本和目标Informix版本完全匹配,别混用不同版本的驱动和客户端库
- 打开ODBC数据源管理器(64位/32位),检查已配置的Informix数据源用的驱动版本,确保和测试通过的那个SDK版本一致
5. 检查Windows系统更新或DLL依赖缺失
- 用
dumpbin /dependents命令(需要装Visual Studio工具集)检查翻译库依赖的其他DLL是否存在,有没有系统更新导致某些系统DLL版本变化 - 运行
sfc /scannow修复系统文件,排除系统级DLL损坏的可能
内容的提问来源于stack exchange,提问作者ImTryingVeryHard
相关产品推荐
相关产品推荐

