[20190720]12CR2 max_idle_time.txt
--//12CR2引入max_idle_time参数,可以简单的控制会话长期不使用自动退出,单位是分钟。
--//简单测试看看。
1.环境:
SCOTT@test01p> @ ver1
PORT_STRING VERSION BANNER CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0 12.2.0.1.0 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0
SCOTT@test01p> show parameter max_idle_time
NAME TYPE VALUE
------------- ------- -------
max_idle_time integer 0
--//缺省是0.也就是不会起作用。
SCOTT@test01p> alter session set max_idle_time=1;
alter session set max_idle_time=1
*
ERROR at line 1:
ORA-02096: specified initialization parameter is not modifiable with this option
--//session级别修改无效。
SCOTT@test01p> alter system set max_idle_time=1;
System altered.
--//退出继续测试。
2.开始测试:
SCOTT@test01p> select sysdate from dual ;
SYSDATE
-------------------
2019-07-20 19:19:52
SCOTT@test01p> host sleep 61
SCOTT@test01p> select sysdate from dual ;
SYSDATE
-------------------
2019-07-20 19:21:16
--//这样无效!!
SCOTT@test01p> select sysdate from dual ;
SYSDATE
-------------------
2019-07-20 19:15:59
SCOTT@test01p> host sleep 120
SCOTT@test01p> select sysdate from dual ;
select sysdate from dual
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 7020
Session ID: 251 Serial number: 49075
--//换一句话讲这个参数非常像sqlnet.ora中的SQLNET.EXPIRE_TIME参数。
--//参考链接:http://blog.itpub.net/267265/viewspace-2150499/=>[20180124]测试SQLNET.EXPIRE_TIME参数3
--//可以看出规律,测试环境是SQLNET.EXPIRE_TIME=1.
--//也就是在15:30:22 - 15:31:22 (1分钟时间内如果client端发起连接,通俗讲执行sql语句),这个1分钟内不会发出从服务器端发监测包.
--//这样到下1分钟(15:31:22 - 15:32:22),如果client没有发起连接,再发出监测包.这样看到的间隔就是接近2分钟.
--//再通俗讲如果在间隔时间内如果有client端发出数据包,服务端的监测包就不会发,这样看到的情况最大间隔就是
--//2 * SQLNET.EXPIRE_TIME.实际上我以前一直以为最大间隙是仅仅出现在开始第1次实际上可以出现任何时间段.
--//自己总算理解为什么SQLNET.EXPIRE_TIME=N,最大间隔是2 * N 分钟.
--//也就是如果网络在没有任何发包的情况下20分钟断开,你必须设置SQLNET.EXPIRE_TIME<=10的原因.
--//我建立如下脚本(aa1.txt):
select sysdate from dual ;
host sleep &&1
select sysdate from dual ;
SCOTT@test01p> @ aa1.txt 130
SYSDATE
-------------------
2019-07-20 19:56:55
SYSDATE
-------------------
2019-07-20 19:59:05
--//你可以发现作为一组命令执行,执行过程中不会断开。仅仅分开执行时才会有效(注:我测试多次,也出现过sleep 121也没有断开的情况)。
--//视乎是连接程序在检测是否有键盘操作,如果执行sleep时回车,结束sleep后,马上执行语句就可以正常执行)。
--//实际上我自己有点不理解oracle为什么会加入这样的参数。