文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Oracle之关于各类连接超时相关参数学习

2023-04-12 15:12

关注

最近遇到些空闲连接超时相关的问题,查了下主要有以下与超时相关参数,整理记录含义及区别。

一、 EXPIRE_TIME

1. 使用说明

EXPIRE_TIME 用于死连接检测。设定该参数为非零值,12c前会定期给空闲连接发送探测包检查客户端是否已异常断开(12c开始则利用操作系统keepalive参数进行检测)。

一旦发现异常连接,最多会重传操作系统参数tcp_retries2指定次数。

如果超过最大重试次数仍重传失败,将返回错误并通知oracle pmon进程清除对应的server process。

值得注意的是,根据文档 Doc ID 395505.1,如果在1个SQLNET.EXPIRE_TIME之内客户端有数据包发送,在SQLNET.EXPIRE_TIME时间到来时,oracle不会再发送探测数据包给客户端,这样有可能出现最大2*SQLNET.EXPIRE_TIME时间端内,没有发送探测包给客户端的情况。

比如设置sqlnet.expire_time=10,最大空闲时间则可能为2*600=1200秒,如果防火墙空闲超时为910秒,完全可能出现在探测包发送之前,空闲连接就已经被断开的情况。

2. 使用限制

新设置参数对旧连接上不生效(It is not allowed on bequeathed connections.)

探测数据包虽然很小,却也会产生额外的流量,可能降低网络性能

根据操作系统不同,服务器可能需要执行其他处理,以区分连接探测事件和其他事件,这也会导致网络性能下降。

二、 IDLE_TIMEOUT

空闲超时时间。指定已建立的连接在不传输数据的情况下可以保持活动状态的时间。

Oracle默认情况下不会关闭非活跃连接(IDLE_TIMEOUT=0),但非活跃连接过长时间不退出可能导致连接数过高,浪费数据库资源。

将IDLE_TIMEOUT设置为大于0的值(单位为秒)指定会话空闲超时时间,到达超时时间后会话会被数据库中断。

通常防火墙会有kill空闲连接的配置,可以看看是否有必要重复设置。如果要设,IDLE_TIMEOUT指定的时间应该小于防火墙指定的空闲时间。

EXPIRE_TIME 与 IDLE_TIMEOUT的区别:

三、 SESSION_TIMEOUT

指定用户会话允许的最长时间(以秒为单位)。很明显这个参数要更进一步,无论用户会话是不是空闲,到了SESSION_TIMEOUT指定就会被中断。

默认值为0,表示禁用该功能。

四、 INBOUND_CONNECT_TIMEOUT

表示等待用户认证超时的时间。单位是秒,默认60秒,如果客户端在指定的时间内没有连接上数据库(例如用户认证超时),会在listener.log中会出现 TNS-12535: TNS:operation timed out,在alert日志中记录 WARNING: inbound connection timed out (ORA-3136) 和 TNS-12535。

另外在listener.ora中也有一个INBOUND_CONNECT_TIMEOUT参数,名为:inbound_connect_timeout_监听器名。

如果建立监听后在设置的时间内没有反应将会断开连接,单位是秒,默认60秒。

如果连接请求超时,listener.log中会出现 TNS-12525: TNS:listener has not received client's request in time allowed。

关于两者之间的关系,官方文档建议INBOUND_CONNECT_TIMEOUT_listener_name的值低于SQLNET.INBOUND_CONNECT_TIMEOUT。

Set both parameters to an initial low value.

Set the value of the INBOUND_CONNECT_TIMEOUT_listener_name parameter to a lower value than the SQLNET.INBOUND_CONNECT_TIMEOUT parameter.

For example, you can set INBOUND_CONNECT_TIMEOUT_listener_name to 2 seconds and INBOUND_CONNECT_TIMEOUT parameter to 3 seconds. If clients are unable to complete connections within the specified time due to system or network delays that are normal for the particular environment, then increment the time as needed.

前面几个参数都是系统级的,下面来看可以在用户级指定的超时参数。

五、 profile中的idle_time

用户级的空闲超时时间。单位是分钟,默认是UNLIMITED,连接始终不会被断开,这就占用了连接数资源。

配置步骤如下,注意设置后对已经连上的会话不生效,对新连上的会话才生效。

-- 查找用户所属的profile,例如叫APP_USER
select username, b.*
from dba_users a, dba_profiles b
where a.profile = b.profile and username='USERNAME';

-- 更改该profile的idle_time
alter profile app_user limit idle_time 30;

-- 使修改的资源生效,需要设置resource_limit设置为true
alter system set resource_limit=true;

如果用户空闲超过指定时间,会报错ORA-02396:exceeded maximum idle time, please connect again

六、 profile中的connect_time

用户级的会话超时时间(类似前面SESSION_TIMEOUT),单位是分钟,默认是UNLIMITED。

用户会话在到达设置的时候后不能再继续操作(无论期间是不是空闲)。

设置方法跟前面类似

-- 查找用户所属的profile,例如叫APP_USER
select username, b.*
from dba_users a, dba_profiles b
where a.profile = b.profile and username='USERNAME';

-- 更改该profile的connect_time
alter profile app_user limit connect_time 30;

-- 使修改的资源生效,需要设置resource_limit设置为true
alter system set resource_limit=true;

如果是设置1分钟,会在将近2分钟的时候提醒你重新登录,ORA-02399: exceeded maximum connect time, you are being logged off。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯