为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: --03134284368-20250423-270902-20149 企业版 8.1.4.80
【操作系统】: CentOS Linux release 7.6.1811 (Core)
【CPU】:x86_64 Hygon C86-3G 7380 32-core Processor
【问题描述】*:查询V$SESSIONS视图中有大量用户名为空的连接,状态为 STARTUP。 而且连接数持续增加。 很快就涨到数据库最大连接数2400,导致新连接无法建立
查询用户状态,已经被锁定,但锁定的时间一直在不断刷新
后来发现问题的原因: 一个大数据的应用中,数据库密码配置错误导致数据库用户被锁定导致。
解决方法:
1 修改应用配置成正确的密码
2 解锁用户
3 SP_CLOSE_SESSION杀掉死连接
请问用户的密码错误已被锁定,为什么仍然会在数据库中,不断建立建立新的空用户名连接?
库需要先创建会话对象,分配资源,此时会话startup,下一步才能做密码和锁定校验,STARTUP状态失败后不会自动清理,因为正常会话建立也有startup状态,其他库处理应该也是类似的

说明数据库的 "建立会话" 动作发生在 "身份验证" 之前。因此,即使身份验证因用户被锁定而失败,为验证而创建的
STARTUP会话本身已经占用了连接资源。-- 批量关闭这些异常会话
DECLARE V_SESS_ID BIGINT; BEGIN FOR RS IN (SELECT SESS_ID FROM V$SESSIONS WHERE STATE = 'STARTUP' AND USER_NAME IS NULL) LOOP SP_CLOSE_SESSION(RS.SESS_ID); END LOOP; END;