1) ,连接的有效性.即:你发出去的所以连接都是经过你的系统自动生成的.并不是恶意的连接,所以我建议保留一个识别器到数据库并记录时间即状态,
2).既然保留的时间那你就可以验证你的连接是否有效和控制时间.
---------------------------
2,
1)如果不想保留数据库,将连接用SDL OR MD5加密后发送,并跟一个日期参数,当拦截器拦截到你发送给别人的修改密码连接地址是就直接可以在拦截中判断是否超时.如果超时直接返回ERROR页面,不要进入逻辑流程
3
1),如果可以的话 你可以通过系统时间控制你的连接有效性
可以对其进行修改。例如创建一个名称为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
原因: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=用户idPassword=密码Data Source=IP:端口/服务器名min pool size=0"
连接字符串参数详细说明见:
https://docs.oracle.com/database/121/ODPNT/OracleConnectionClass.htm#ODPNT805
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)