oracle闲置超时,怎么样重新连接(急)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle闲置超时,怎么样重新连接(急)相关的知识,希望对你有一定的参考价值。

用的是数据源,当长时间不操作时,突然查询,会报ORA-02396: exceeded maximum idle time, please connect again错,不能修改oracle中配置以及数据源的配置;就是说我用try catch捕获到这个查询异常后,怎么样再次用JAVA代码重新恢复登录查询

原因:
1、EF 、EFCore 中默认存在链接池,每次数据库操作完成之后,会将连接丢到连接池。连接的释放过程单独管控(这里不做详细解释);
2、当Oracle数据库中设置有连接(会话)有效期时,到期后,Oracle服务端会中断连接,并将会话标识为:SNIPED状态;

注:查询数据中已超时,未释放的会话:select * from v$session where status = 'SNIPED';
3、当Oracle数据库中连接超时后,EF连接池中的连接依然存在,若再次进行数据库操作,则会提示 idle 超时异常;
解决方案:
方案1:调整数据库设置,将数据库中的“IDLE_TIME”设置未“UNLIMITED”,具体方式请自行百度;
可通过以下语句查看当前设置:
select username, b.* from dba_users a, dba_profiles b where a.profile = b.profile and username='IOT_SUB_ALL';
方案2:
在项目代码数据库连接字符串中添加:min pool size=0;设置,将EF连接池最小连接保持数设置为0(默认为1);
连接字符串样式:
"User Id=用户id;Password=密码;Data Source=IP:端口/服务器名;min pool size=0;"
连接字符串参数详细说明见:
https://docs.oracle.com/database/121/ODPNT/OracleConnectionClass.htm#ODPNT805
参考技术A 因为你使用的用户被设置了最大空闲时间的profile
建议你如果远程数据库的用户profile设置不能改,那每次使用完dblink后,及时关闭
用的时候再打开追问

说的很对,但是我的那个白天使用频繁,所以不能采纳使用完后及时关闭,只能想想报了这个错,怎么用JAVA重新登录一次,有样例吗,不胜感激

追答

你代码里的connect to数据库的那句话重新run下就好,连接语句可以重复执行

追问

我用的是JDBC,jdbcTemplate.getDataSource().getConnection()获取到connection,后面怎么弄,简单举个例子,辛苦了

本回答被提问者采纳
参考技术B 再次调用getConnection()获取连接就可以了 参考技术C 重新连接一下

oracle链接超时问题,应该怎么设置

设置ORACLE的会话连接超时:
1、profile的idle_time限制
oracle用户的配置文件的密码策略是实时生效的,所见即所得。但是用户配置文件的资源限制是由resource_limit参数决定的。
单位是分钟,默认没记错的话应该是10分钟
要是修改的资源生效,需要设置resource_limit设置为true
alter system set resource_limit=true ;
如果在idle的时间内用户没有执行任何操作,会提示ORA-02396:exceeded maximum idle time, please connect again
2、profile的connect_time限制
默认是UNLIMITED,单位是分钟
用户在到达设置的时候后,不可以在继续操作,会提示ORA-02399: exceeded maximum connect time, you are being logged off
如果是设置1分钟,他会在将近2分钟的时候提醒你重新登录。
3、sqlnet的expire_time限制:
expire_time主要是在指定的时间去探测客户端是否可以连通,如果可以的话重新计时,否则就会断开
在执行rman的时候遇见:ORA-03135: connection lost contact,可以尝试将此值设置大些。(ID 729811.1)
4、sqlnet的inbound_connect_timieout_listener_name限制
单位是秒,默认值是60
参考技术A 原因:
1、EF、EFCore中默认存在链接池,每次数据库操作完成之后,会将连接丢到连接池。连接的释放过程单独管控(这里不做详细解释);
2、当Oracle数据库中设置有连接(会话)有效期时,到期后,Oracle服务端会中断连接,并将会话标识为:SNIPED状态;

注:查询数据中已超时,未释放的会话:select * from v$session where status = 'SNIPED';
3、当Oracle数据库中连接超时后,EF连接池中的连接依然存在,若再次进行数据库操作,则会提示idle超时异常;
解决方案:
方案1:调整数据库设置,将数据库中的“IDLE_TIME”设置为“UNLIMITED”,具体方式请自行百度;(注:默认为UNLIMITED,出现idle超时,一定是DBA添加了限制)
可通过以下语句查看当前设置:
select username, b.* from dba_users a, dba_profiles b where a.profile = b.profile and username='IOT_SUB_ALL';
方案2:
在项目代码数据库连接字符串中添加:min pool size=0;设置,将EF连接池最小连接保持数设置为0(默认为1);
连接字符串样式:
"User Id=用户id;Password=密码;Data Source=IP:端口/服务器名;min pool size=0;"
连接字符串参数详细说明见:

以上是关于oracle闲置超时,怎么样重新连接(急)的主要内容,如果未能解决你的问题,请参考以下文章

oracle链接超时问题,应该怎么设置

PLSQL远程连接Oracle报连接超时,PLSQ本地连接Oracle正常时怎么回事,请大侠给说一下

ORA-12170: TNS: 连接超时 怎么回事

DUBBO 超时异常怎么抓到,并处理记入数据库

我的FlashFXP连接失败(连接超时)怎样解决

经典问题:ORA-12170:TNS:连接超时!求解决办法。