如何控制用户并发连接数_Profile中SESSIONS_PER_USER参数

张开发
2026/4/10 11:42:05 15 分钟阅读

分享文章

如何控制用户并发连接数_Profile中SESSIONS_PER_USER参数
SESSIONS_PER_USER 是 Oracle PROFILE 中限制同一用户同时数据库会话数的参数仅对认证成功后的活跃或未断开会话生效不控制TCP连接、监听器队列或连接池空闲连接。SESSIONS_PER_USER 是什么它真能限制并发连接数sessions_per_user 是 oracle 数据库 profile 中的一个参数但它只控制「同一用户在同一时刻能建立的**会话数**」不是操作系统级或网络层的并发连接限制。关键点在于它只在用户成功认证后、会话真正创建时才生效tcp 连接建立、登录过程中的握手、甚至密码错误重试都不受它约束。常见错误现象ORA-02391: exceeded simultaneous sessions per user limit —— 这个报错出现时说明用户已通过认证且当前活跃会话v$session 中 STATUS ACTIVE 或 INACTIVE 但未断开已达上限。它不阻止客户端发起新 TCP 连接比如用 sqlplus 反复敲回车重连它不干预数据库监听器lsnrctl的连接队列或 MAX_PROCESSES 限制如果应用使用连接池如 UCP、HikariCP一个池可能维持几十个空闲会话SESSIONS_PER_USER 很快被耗尽怎么设置和验证 SESSIONS_PER_USER 生效必须先创建或修改 PROFILE再将该 profile 赋给用户。直接改用户参数无效。实操建议新建 profileCREATE PROFILE app_user_prof LIMIT SESSIONS_PER_USER 5;赋给用户ALTER USER app_user PROFILE app_user_prof;立即生效无需重启实例但已有会话不受影响只约束新登录验证是否生效SELECT LIMIT FROM DBA_PROFILES WHERE PROFILE APP_USER_PROF AND RESOURCE_NAME SESSIONS_PER_USER;查当前用户会话数SELECT COUNT(*) FROM v$session WHERE USERNAME APP_USER;为什么设了还是拦不住“大量连接”常见漏点根本原因SESSIONS_PER_USER 的粒度是「数据库会话」而真实场景里“连接”常被混淆为网络连接、应用连接池连接、中间件连接、甚至短连接脚本。 跃问 跃问是由阶跃星辰开发的免费AI智能问答助手随时帮你智能搜索、高效阅读、识图理解、和你畅聊感兴趣的话题。

更多文章