Oracle各类连接超时相关参数怎么使用
今天小编给大家分享一下Oracle各类连接超时相关参数怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
一、 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的区别:
EXPIRE_TIME
检查的是客户端由于各种原因已经异常中断的会话,虽然v$session视图看到处于inactive状态,但其实该连接已经僵死,不会再有数据请求。IDLE_TIMEOUT
检查的是处于inactive状态超过指定时间的会话,即使客户端正常连接,到达超时时间后也会将其中断。
三、 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_USERselect username, b.*from dba_users a, dba_profiles bwhere a.profile = b.profile and username='USERNAME'; -- 更改该profile的idle_timealter profile app_user limit idle_time 30; -- 使修改的资源生效,需要设置resource_limit设置为truealter system set resource_limit=true;
如果用户空闲超过指定时间,会报错ORA-02396:exceeded maximum idle time, please connect again
六、 profile中的connect_time
用户级的会话超时时间(类似前面SESSION_TIMEOUT),单位是分钟,默认是UNLIMITED。
用户会话在到达设置的时候后不能再继续操作(无论期间是不是空闲)。
设置方法跟前面类似
-- 查找用户所属的profile,例如叫APP_USERselect username, b.*from dba_users a, dba_profiles bwhere a.profile = b.profile and username='USERNAME'; -- 更改该profile的connect_timealter profile app_user limit connect_time 30; -- 使修改的资源生效,需要设置resource_limit设置为truealter system set resource_limit=true;
如果是设置1分钟,会在将近2分钟的时候提醒你重新登录,ORA-02399: exceeded maximum connect time, you are being logged off。
以上就是“Oracle各类连接超时相关参数怎么使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341