zoukankan      html  css  js  c++  java
  • 记--查询分析清理oracle阻塞会话

    环境:windows server 2003 ,Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi

    1.查询当前系统活动的会话

    1 select 
    2 t.SID,t.SERIAL#,t.STATUS,t.LOGON_TIME,t.LAST_CALL_ET,t.PROGRAM,t.LOCKWAIT,
    3 t.BLOCKING_SESSION,t.BLOCKING_SESSION_STATUS,t.BLOCKING_INSTANCE,
    4 t.USERNAME,t.PROCESS,t.OSUSER,t.SERVER,t.OSUSER,
    5 t.MACHINE,t.TERMINAL,t.PROCESS,t.PROGRAM,t.type,t.MODULE_HASH
    6 ,t.ROW_WAIT_OBJ#,t.ROW_WAIT_FILE#,t.ROW_WAIT_BLOCK#,t.ROW_WAIT_ROW#,t.EVENT,t.STATE,t.SERVICE_NAME
    7 from v$session t
    8 where
    9 t.USERNAME = 'CLIMS' and t.STATUS = 'ACTIVE'

    2.查询所有活动会话的sql语句

    1 select sql_text, st.SQL_ID, st.COMMAND_TYPE
    2   from v$sqltext st, v$session s
    3  where (st.sql_id = s.sql_id)
    4    and s.sid in (select t.SID
    5                    from v$session t
    6                   where t.USERNAME = 'CLIMS'
    7                     and t.STATUS = 'ACTIVE');

    3.查询当前系统的锁住会话及对象

    1 SELECT b.owner,b.object_name,a.session_id,a.locked_mode 
    2     FROM v$locked_object a ,dba_objects b  
    3     WHERE b.object_id = a.object_id;  

    4.杀死一个会话

    alter system kill session 'sid, serial#'

    5.如果要一次性杀死多个会话,一个一个填写sid和serial#十分的繁琐,应该在查询被锁对象的同时拼凑出多条的杀会话语句,以分号分隔,一起复制下来,然后就可以批量的执行了。

    拼凑kill语句的方式如下,下面加了一个过滤条件和一个排序,杀除真正关心的表,并且着重注意超时时间过长的会话。 

    SELECT'alter system kill session '''|| c.sid ||''||','|| c.serial# ||''';',
            a.object_id, a.session_id, b.object_name, c.*
       FROM v$locked_object a, dba_objects b, v$session c
      WHERE a.object_id = b.object_id
       AND a.SESSION_ID = c.sid(+)
        AND schemaname ='Unmi'
      ORDER BYlogon_time

    6. 杀死会话不成功,用orakill杀死线程

       Orakill的使用方法如下:

       C:>orakill sid thread

       说明:sid Oracle的Sid号

               thread  Oracle的线程id号

      查询sid 

    select instance_name from v$instance;

      查询thread

    SELECT s.sid , s.serial# , p.spid ,
    s.osuser, s.programFROM v$process p, v$session s
    WHERE p.addr = s.paddr(+)
    ORDER BY s.sid
    p.spid 即为thread,登入命令行窗口,执行Orakill命令 orakill sid thread。

    以上这些是整理最近两天处理的问题,由于是菜鸟,查询语句借鉴了网上的内容,望谅解。
    附:v$session字段详解 http://blog.csdn.net/rulev5/article/details/6990849

  • 相关阅读:
    python命令行传参详解,optparse模块OptionParse类的学习
    设计模式之共享模式
    用flask搭建一个测试数据生成器(v1.1)
    用flask搭建一个测试数据生成器(v1.0)
    jmeter中使用beanshell断言
    jmeter中beanshell脚本的使用
    从上帝视角看OS进程调度
    Linux网络内部原理系列
    从文件read/write一个字节的过程和所发生的磁盘IO
    深入理解系统中断(INTERUPT)
  • 原文地址:https://www.cnblogs.com/hucc/p/3458192.html
Copyright © 2011-2022 走看看