WebSphere连接DB2报SQLNonTransientException错误(08001/-1639)如何解决
问题排查与解决指南:WebSphere 9.0 连接DB2 11.1 报错DSRA0010E(SQL状态08001,错误码-1639)
错误码-1639对应DB2官方定义的TCP/IP连接失败异常,SQL状态08001为通用数据库连接异常,错误首先触发于WebSphere所在的应用服务器(机器A),按照以下步骤逐层排查即可定位根因
一、基础网络连通性排查
先排除网络、数据库服务可用性问题:
- 登录机器A,执行
telnet <机器B的IP> <DB2服务端口,默认50000>,如果telnet不通,优先排查机器B侧配置:- 执行
ps -ef | grep db2sysc确认DB2实例进程存活 - 执行
db2 get dbm cfg | grep SVCENAME确认DB2监听端口配置正确 - 执行
netstat -anp | grep <DB2端口号>确认端口处于正常监听状态 - 检查机器B的防火墙、IP白名单规则,确认已放通机器A的IP访问
- 执行
- 若telnet连通,进入下一步排查
二、WAS侧JDBC配置校验
补丁更新后JDBC配置异常是该类问题的高发原因:
- 确认JDBC驱动文件完整性:登录WAS管理控制台,进入
资源 > JDBC > JDBC提供程序 > DB2 Universal JDBC Driver Provider,检查类路径配置的db2jcc4.jar、db2jcc_license_cu.jar路径正确,且WAS进程运行用户对驱动文件有读权限 - 直接通过WAS自带JDK验证JDBC连通性:
cd <WAS安装目录>/AppServer/java/bin java com.ibm.db2.jcc.DB2Jcc -url jdbc:db2://<机器B的IP>:<DB2端口>/<数据库名> -user <数据库用户名> -password <密码>- 若命令返回连接成功,说明驱动、数据库侧权限无问题,问题出在WAS数据源配置,检查数据源自定义属性中
serverName、portNumber、databaseName参数是否正确 - 若命令返回认证失败,检查数据库用户名密码是否过期、对目标库是否有连接权限
- 若命令返回SSL握手失败,检查补丁更新后WAS信任库是否丢失DB2端的SSL证书
- 若命令返回连接成功,说明驱动、数据库侧权限无问题,问题出在WAS数据源配置,检查数据源自定义属性中
- 确认WAS数据源的认证别名配置正确,未出现补丁更新后配置回滚的情况
三、补丁变更关联校验
确认生产补丁更新带来的隐性配置变更:
- 检查机器A的SUSE系统补丁记录,若升级了libssl、libc等网络相关依赖包,且数据源配置了SSL连接,可以临时改为非SSL连接测试是否恢复
- 检查WAS自带JRE的安全策略配置:补丁更新可能修改
<WAS安装目录>/AppServer/java/conf/security/java.security中的jdk.tls.disabledAlgorithms参数,若禁用了DB2端支持的TLS1.0/1.1协议,移除对应禁用项后重启WAS测试 - 若DB2侧也同步更新了补丁,执行
db2set DB2COMM确认配置值为TCPIP,未被重置为空
四、快速恢复方案
若需要优先恢复业务,直接删除原有数据源,通过WAS管理控制台重新创建DB2数据源,配置正确的连接参数、认证别名后测试连接,可解决90%以上补丁更新带来的配置缓存异常问题。
内容的提问来源于stack exchange,提问作者Ashish Sharma
相关产品推荐
相关产品推荐

