应用连接Oracle数据库报ORA-28274错误排查求助
ORA-28274: No ORACLE password attribute corresponding to user nickname exists 问题排查(Tomcat环境连接失败,测试类正常)
问题描述
数据库正常运行,可通过SQLDeveloper正常连接(确认凭据正确),但Tomcat部署的应用连接Oracle时抛出如下错误,相同代码的独立测试类(执行Handle h = open();)却能正常连接。
报错日志:
09:27:06.190 [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0] DEBUG com.mchange.v2.resourcepool.BasicResourcePool - An exception occurred while acquiring a poolable resource. Will retry. java.sql.SQLException: ORA-28274: No ORACLE password attribute corresponding to user nickname exists. at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331) 09:27:06.200 [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0] WARN com.mchange.v2.resourcepool.BasicResourcePool - com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@58c010ac -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception: java.sql.SQLException: ORA-28274: No ORACLE password attribute corresponding to user nickname exists. at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
技术栈:ojdbc-8 19.3.0.0、Java 8
可能的原因及解决方法
1. Tomcat数据源配置参数异常
ORA-28274错误核心是Oracle身份验证的属性不匹配,重点检查Tomcat的数据源配置(如context.xml/server.xml中的<Resource>标签):
- 确认
username配置的是数据库真实用户名,而非别名; - 若使用Oracle钱包或外部身份验证,检查
connectionProperties中是否存在错误的属性(比如多余的oracle.net.authentication_services参数); - 对比测试类的连接参数,确保Tomcat数据源的
url、username、password和测试类完全一致。
2. Tomcat环境类加载冲突
测试类正常但Tomcat下失败,大概率是驱动类加载冲突:
- 检查Tomcat的
lib目录,是否存在旧版本ojdbc驱动(如ojdbc6),和应用依赖的ojdbc-8 19.3.0.0冲突,导致加载了错误的驱动类; - 解决:清理Tomcat/lib下所有ojdbc相关jar包,确保应用依赖的ojdbc-8 19.3.0.0是唯一被加载的Oracle驱动。
3. 连接池配置干扰
从日志可见使用了c3p0连接池,检查连接池配置:
- 确认没有添加额外的身份验证自定义配置(如
connectionCustomizerClassName),避免传递给Oracle驱动异常参数; - 尝试简化连接池配置,仅保留
jdbcUrl、user、password核心参数,排除多余配置的干扰。
4. 运行环境属性差异
测试类和Tomcat的JVM运行环境可能存在差异:
- 检查Tomcat启动脚本(
catalina.sh/catalina.bat),是否添加了Oracle身份验证相关的系统属性(如java.security.auth.login.config),这类属性可能干扰驱动的身份验证流程; - 对比测试类的启动参数,确保Tomcat的JVM参数和测试类一致。
内容的提问来源于stack exchange,提问作者Michu93
相关产品推荐
相关产品推荐

