题目部分

在Oracle中,如何定时清理INACTIVE状态的会话?

     

答案部分

一般情况下,少量的INACTVIE会话对数据库并没有什么影响,但是,如果由于程序设计等某些原因导致数据库出现大量的会话长时间处于INACTIVE状态,那么将会导致大量的系统资源被消耗,造成会话数超过系统SESSION的最大值,出现ORA-00018:maximum number of sessions exceeded错误。此时就需要清理那些长时间处于INACTIVE状态的会话。人为定期检查、杀掉这类会话肯定不太现实,要定期清理那些长时间处于INACTIVE的会话,可以使用如下几种办法:

1. sqlnet.ora文件里加上sqlnet.expire_time,单位为分钟数。

2. 设置用户profile的IDLE_TIME参数,需要设置resource_limit为true,然后再设置IDLE_TIME参数,单位为分钟:

1alter system set resource_limit=true;
2alter profile default limit idle_time 10;

方法2需要和方法1结合使用。

3. 直接KILL掉INACTIVE的会话。V$SESSION视图中的LAST_CALL_ET字段表示用户最后一条语句执行完毕后到sysdate的时间,单位为秒。每次用户执行一个新的语句后,该字段复位为0,重新开始记数。可以通过该字段来获得一个连接用户最后一次操作数据库后的空闲时间。推荐使用这种方法来释放INACTIVE状态的会话。具体代码如下所示:

 1set sqlblanklines on
2CREATE OR REPLACE PROCEDURE P_kill_session_LHR AS
3        -----------------------------------------------------------------------------------
4        -- Created on 2013-06-25 12:05:07 by lhr
5        --Changed on 2015-08-05 12:05:07 by lhr
6        -- function:  杀掉10个小时之前的会话 ,告警日志中会记录被杀掉的会话信息
7        -----------------------------------------------------------------------------------
8
9    BEGIN
10
11        -- IF to_char(SYSDATE, 'HH24') >= '20' OR
12        --     TO_CHAR(SYSDATE, 'HH24') <= '08' THEN
13
14        FOR cur IN (SELECT A.USERNAME,
15                           A.LOGON_TIME,
16                           A.STATUS,
17                           A.SID,
18                           A.SERIAL#,
19                           A.MACHINE,
20                           A.OSUSER,
21                       'ALTER SYSTEM  DISCONNECT SESSION ''' || a.SID || ',' ||
22                       a.serial# || ',@' || a.INST_ID || ''' IMMEDIATE' kill_session
23                    FROM   gv$session A
24                    WHERE  A.STATUS IN ('INACTIVE')
25                    AND    A.USERNAME IS NOT NULL
26                    AND    A.LAST_CALL_ET >= 60 * 60 * 10) LOOP
27
28            BEGIN
29
30                EXECUTE IMMEDIATE cur.kill_session;
31            EXCEPTION
32                WHEN OTHERS THEN
33                    NULL;
34            END;
35
36        END LOOP;
37
38        -- END IF;
39
40    EXCEPTION
41        WHEN OTHERS THEN
42            NULL;
43    END P_kill_session_LHR;
44/
45
46
47
48BEGIN
49    --DBMS_SCHEDULER.drop_job('JOB_P_kill_session_LHR');
50    DBMS_SCHEDULER.CREATE_JOB(JOB_NAME        => 'JOB_P_kill_session_LHR',
51                              JOB_TYPE        => 'STORED_PROCEDURE',
52                              JOB_ACTION      => 'P_kill_session_LHR',
53                              repeat_interval => 'FREQ=MINUTELY;INTERVAL=60',
54                              ENABLED         => TRUE,
55                              START_DATE      => SYSDATE,
56                              COMMENTS        => '删除--每60分钟检查一次');
57END;
58/

 

& 说明:

有关如何定时清理INACTIVE状态的会话的更多内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2154547/

 

本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗

---------------优质麦课------------

详细内容可以添加麦老师微信或QQ私聊。

About Me:小麦苗

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● QQ:646634621  QQ群:618766405

● 提供OCP、OCM和高可用部分最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

DBA宝典

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。

©著作权归作者所有:来自51CTO博客作者小麦苗DB宝的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 【DB笔试面试689】在Oracle中,如何收集systemdump?如何收集hangana
  2. 【DB笔试面试695】在Oracle中,什么是Oracle RDA(Remote Diagnostic
  3. 【DB笔试面试208】在Oracle中,如何快速计算事务的时间与日志量?
  4. 【DB笔试面试664】在Oracle中,模拟死锁产生的一个场景。
  5. 【DB笔试面试223】在Oracle中,如果丢失一个数据文件而且没有备份,
  6. 【DB笔试面试219】在Oracle中,如果发现有坏块,那么如何检索其它未
  7. 【DB笔试面试618】在Oracle中,“OR扩展”可以有查询转换吗?
  8. 【DB笔试面试692】在Oracle中,V$SYSSTAT中的CLASS列分别代表什么?
  9. 【DB笔试面试497】Oracle使用哪个包可以生成并传递数据库告警信

随机推荐

  1. Android ContentProvider 多进程multipro
  2. android EditText inputType
  3. .Net 转战 Android 4.4 日常笔记(6)--Andro
  4. Android(安卓)Bluetooth
  5. Android RelativeLayout 的属性
  6. android中使用 EditText 时,设定 inputTyp
  7. 浅谈android的selector,背景选择器
  8. 如何解析 android 中的 XML?
  9. 解决 Android(安卓)Studio:Failed to reso
  10. 别人学习android的用到的书和路线