异常信息如下:
2018-04-18 08:39:02,494 INFO  method:com.mchange.v2.c3p0.SQLWarnings.logAndClearWarnings(SQLWarnings.java:43) - ORA-28002: the password will expire within 5 days

java.sql.SQLWarning: ORA-28002: the password will expire within 5 days

    at oracle.jdbc.driver.DatabaseError.addSqlWarning(DatabaseError.java:2048)
    at oracle.jdbc.driver.DatabaseError.newSqlWarning(DatabaseError.java:1880)
    at oracle.jdbc.driver.T4CTTIoer.processWarning(T4CTTIoer.java:522)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:455)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:200)
    at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:379)
    at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:806)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:446)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:557)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:233)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:29)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:556)
    at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
    at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
    at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
这个是Oracle提示密码即将在5天内过期。解决该问题的办法最直接的就是修改用户的密码,修改后就不不会再有该提示。但是,这么解决治标不治本啊。因为Oracle的密码失效默认为180天过期。在开发过程中,显然大部分时间我们是希望该密码永久有效的。
解决办法:
1、查看用户的profile设置:
select username,profile from dba_users;
在Oracle中,每个用户都会有对应的一种特定类型的profile概要设置,默认为DEFAULT。
2、查看系统profile中PASSWORD_LIFE_TIME设置:
PASSWORD_LIFE_TIME密码生命周期,指用户密码什么时候到期,单位是天,如图,安装 Oracle 时默认的 PASSWORD_LIFE_TIME 是 180 天, 即 6 个月,其含义就是,我们的用户密码每 6 个月就需要更新(注意: 这里的更新不是指密码需要改变,而是指一个更新动作,可以维持密码不变,但必须执行这个更新动作
3、修改DBA_PROFILES中的PASSWORD_LIFE_TIME的设置,改为ULIMITED,表示 无限永不过期的。
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
这个时候再去查看DEFAULT的PROFILE中PASSWORD_LIFE_TIME 时,已经被修改为UNIMITED,修改后设置立即生效,不需要重启数据库,此时密码永远就不会过期啦。
4、已经被报告了密码快要过期的账户必须再改一次密码(部分需要DBA权限)
但为了保险起见,在这里一般都建议将所有经常使用的账户都更新一次密码!
可以通过使用PL/SQL登陆,就会提示让你重新设置新的密码,这个时候你只需要继续输入旧密码,然后点击确定即可。(此方法比较简单)
也可以通过 sqlplus / as sysdba 登陆到 Oracle (无需密码),然后执行如下命令更新一下密码 :
如果是其他用户的话,那么就使用其他用户名,如 scott。
alter user scott identified by soctt;
我这里还修改了root的密码,否则之前会报28002的错误。
5、重新登陆,不再出现 ORA-28002 错误(观察项目控制台,再也没有提示该异常了)
项目没有继续抛出该异常;使用工具重新登陆,确认没有报 ORA-28002 错误。 至此,这个问题就彻底解决了,以后无论多长时间,都不会再遇到这个问题。
参考资料:https://www.cnblogs.com/shenxiaolin/p/6397753.html

标签: Oracle, Oracle密码过期, 数据库密码过期, 数据库用户密码过期

添加新评论