博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
kill SNIPED session
阅读量:6993 次
发布时间:2019-06-27

本文共 3741 字,大约阅读时间需要 12 分钟。

需要定时kill非inactive session,一种做法是通过编写脚本or脚本定时运行,从而实现该功能;另外一种方法是通过设置profile中的idle_time来实现该功能,但是这其中有两个细节问题需要注意:1.v$session.status=SNIPED最好做清理,2.未提交事务超时可能强制回滚

使用ORACLE PROFILE准备

SQL> CREATE PROFILE KILLIDLE LIMIT IDLE_TIME 1;

Profile created.

SQL> select * from dba_profiles where profile='KILLIDLE';

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT

------------------------------ -------------------------------- -------- ------------

KILLIDLE                       COMPOSITE_LIMIT                  KERNEL   DEFAULT

KILLIDLE                       SESSIONS_PER_USER                KERNEL   DEFAULT

KILLIDLE                       CPU_PER_SESSION                  KERNEL   DEFAULT

KILLIDLE                       CPU_PER_CALL                     KERNEL   DEFAULT

KILLIDLE                       LOGICAL_READS_PER_SESSION        KERNEL   DEFAULT

KILLIDLE                       LOGICAL_READS_PER_CALL           KERNEL   DEFAULT

KILLIDLE                       IDLE_TIME                        KERNEL   1

KILLIDLE                       CONNECT_TIME                     KERNEL   DEFAULT

KILLIDLE                       PRIVATE_SGA                      KERNEL   DEFAULT

KILLIDLE                       FAILED_LOGIN_ATTEMPTS            PASSWORD DEFAULT

KILLIDLE                       PASSWORD_LIFE_TIME               PASSWORD DEFAULT

KILLIDLE                       PASSWORD_REUSE_TIME              PASSWORD DEFAULT

KILLIDLE                       PASSWORD_REUSE_MAX               PASSWORD DEFAULT

KILLIDLE                       PASSWORD_VERIFY_FUNCTION         PASSWORD DEFAULT

KILLIDLE                       PASSWORD_LOCK_TIME               PASSWORD DEFAULT

KILLIDLE                       PASSWORD_GRACE_TIME              PASSWORD DEFAULT

16 rows selected.

SQL> ALTER USER CHF PROFILE KILLIDLE;

User altered.

SQL> SELECT USERNAME,PROFILE FROM DBA_USERS where username='CHF';

USERNAME                       PROFILE

------------------------------ ------------------------------

CHF                            KILLIDLE

SQL> SHOW PARAMETER resource_limit

NAME                                 TYPE        VALUE

------------------------------------ ----------- ---------------

resource_limit                       boolean     FALSE

SQL> ALTER SYSTEM SET resource_limit=TRUE;

System altered.

如果要profile生效,需要修改resource_limit=true,IDLE_TIME单位为分钟

测试IDLE_TIME

--session 1

SQL> show user;

USER is "CHF"

SQL> select * from t_xifenfei;

       ID

----------

        1

--删除一条记录

SQL> delete from t_xifenfei;

1 row deleted.

--查询sid

SQL> select sid from v$mystat where rownum=1;

      SID

----------

       20

--开始不操作该会话时间

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY

-------------------

2013-02-12 22:30:02

--session 2

SQL> show user;

USER is "SYS"

--查询时间

SQL> select status,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from v$session where sid=20;

STATUS   TO_CHAR(SYSDATE,'YY

-------- -------------------

INACTIVE 2013-02-12 22:31:00

--session 1

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual

*

ERROR at line 1:

ORA-02396: exceeded maximum idle time, please connect again

----已经报会话超时

--session 2

SQL> select status,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from v$session where sid=20;

STATUS   TO_CHAR(SYSDATE,'YY

-------- -------------------

SNIPED   2013-02-12 22:34:40

----会话状态为sniped

--session 1

SQL> conn chf/xifenfei

Connected.

SQL> select * from t_xifenfei;

       ID

----------

        1

----事务回滚

SNIPED – An inactive session that has exceeded some configured limits (for example, resource limits specified for the resource manager consumer group or idle_time specified in the user’s profile). Such sessions will not be allowed to become active again.

因为SNIPED的session只有当该session的终端发一个连接信息给数据库,然后终端才会终止连接,如果该客户端一直不发送类似访问,则该连接一直存在,数据库就很可能因为会话数目超过了数据库参数配置从而出现了ORA-00018错误,业务不能正常运行.出现该问题可以通过如下脚本kill -9 pid解决

kill SNIPED session 脚本

#!/bin/sh

tmpfile=/tmp/.kill_sniped

sqlplus system/manager <<EOF

spool $tmpfile

select p.spid from v\$process p,v\$session s

where s.paddr=p.addr

and s.status='SNIPED';

spool off

EOF

for x in `cat $tmpfile | grep "^[0123456789]"`

do

kill -9 $x

done

rm $tmpfile

另外补充说明,IDLE_TIME是对于空闲时间超过了它的配置时间就会去强制终止会话,如果该会话中存在事务,但是inactive时间超过了IDLE_TIME配置时间,数据库依然会强制终止会话,并且回滚事务

查询应用的连接数SQL:

/* Formatted on 2011/6/12 13:06:23 (QP5 v5.163.1008.3004) */

 SELECT b.MACHINE, b.PROGRAM, COUNT (*)

   FROM v$process a, v$session b

  WHERE a.ADDR = b.PADDR AND b.USERNAME IS NOT NULL

GROUP BY b.MACHINE, b.PROGRAM

ORDER BY COUNT (*) DESC;

转载地址:http://rvivl.baihongyu.com/

你可能感兴趣的文章
Python数据结构之旋转链表
查看>>
四年磨砺 亮剑中国SDN
查看>>
SD-WAN行业发展需要VNF演进
查看>>
如何在运维场景中构建一个优秀精准的异常检查系统
查看>>
开发漫谈:我爱编程语言的四大原因
查看>>
持续火热的全闪存存储,给企业带来了些什么
查看>>
中国“大数据产业”虚火旺 投入巨大水平低下
查看>>
微软协作 AI 挑战赛开始报名,沉迷 Minecraft 无法自拔的你不去试试?
查看>>
《Oracle达人修炼秘籍:Oracle 11g数据库管理与开发指南 》一1.1 数据库基本概念...
查看>>
杭州举办车联网大会,定调产业未来
查看>>
TensorFlow教程之API DOC 6.1.15 Struct tensorflow::TensorShapeDim
查看>>
30多个DVR品牌现新漏洞,或致永久性Mirai感染
查看>>
押宝家用光伏 中民投如何重构能源新模式?
查看>>
Android Studio小技巧
查看>>
Node.js和express系列学习资料
查看>>
成为架构师的第一步,精通编码规范
查看>>
JAVA反射举例
查看>>
蚂蚁中间件面试指南
查看>>
atom 快捷键整理
查看>>
Visual Paradigm 教程[UML]:如何定义自定义模型元素属性?
查看>>