最近遇到应用日志里报错:ORA-02396: 超出最大空闲时间, 请重新连接(ORA-02396: exceeded maximum idle time),记录一下处理方法。
出现这个问题的原因是数据库对空闲的连接时间做了限制。
1.SELECT name, value FROM gv$parameter WHERE name = 'resource_limit'; 使用该sql查询是否启用了限制,如果结果是true,说明已启用。
2.select username,PROFILE from dba_users where username='?'; 如果1中的结果是true,查询相关的profile:问号的位置填写连接数据库的账户(username),注意大小写。查询出该账户关联的profile,通常结果为“DEFAULT”.
3.select RESOURCE_NAME,LIMIT from dba_profiles where profile='DEFAULT' and resource_name='IDLE_TIME'; 如果2中执行的结果不是DEFAULT,那么修改sql中的DEFAULT为实际的profile值。
4.根据3中的结果可以看到时间限制的值,这个值需要比应用使用的数据库连接池的空闲时间要长。如果不想做限制,可以直接使用sql取消限制:alter profile default limit idle_time unlimited;
问题解决。
参考文档:
1.ORA-02396: exceeded maximum idle time — oracle-tech
一般为了防止过多活动的session占用资源,可以对允许连接到数据库的session个数,已连接到数据库的session空闲时间等进行限制(当然也可以对尝试连接次数等其它很多内容进行限制)。方式就是可以通过创建一个profile配置,然后将这个profile配置赋给每个用户。
要使用这种限制的前提是将resource_limit这个参数设置为TRUE。
alter system set RESOURCE_LIMIT=true;
创建用户时如果未指定具体profile,会有一个默认的profile,名称是DEFAULT,如下所示:
SELECT * FROM dba_profiles WHERE PROFILE='DEFAULT';
这是这个名称为DEFAULT的所有配置项参数。
其中IDLE_TIME就是一个session连上Oracle后不做任何事情,挂在那里的空闲时间。DEFAULT默认所有的参数都是UNLIMITED,也就是无限制。
但也可以对其进行修改。例如创建一个名称为idletime_profile的profile,并指定其中idle_time参数值是1,单位是分钟。
SQL> create profile idletime_profile limit idle_time 1;
Profile created.
并将该profile赋给用户bisal
SQL> alter user bisal profile idletime_profile;
User altered.
这样当用bisal登录到Oracle后,持续1分钟不干事,再次执行某个操作时就会报ORA-02396: exceeded maximum idle time, please connect again.
select * from v$version; -- 查看oracle的版本信息 select profile,resource_name,limit from dba_profiles where profile='DEFAULT'; select name,value from gv$parameter where name='resource_limit'; select resource_name,limit from dba_profiles where profile='DEFAULT' and resource_name='IDLE_TIME'; alter profile default limit idle_time unlimited; alter profile default limit idle_time 2;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2020-08-24 kettle-如何在作业job中使用JavaScript脚本
2020-08-24 ConcurrentHashMap 源码浅析 1.7
2020-08-24 jxl导入/导出Excel(Maven)
2020-08-24 用属性控制Hibernate生成DDL
2018-08-24 oracle左连接与右连接