Oracle 查看当前所有会话SQL和等待事件

定位会话、定位等待事件、定位SQL

select t2.sid, t2.SERIAL#, -- 库级唯一定位一个session
       t1.SPID OS_PID,     -- 操作系统的PID
       t3.SQL_ID, t2.EVENT,-- SQLID和等待事件
       t2.P1TEXT, t2.P1,   -- 等待事件的P1信息
       t2.p2TEXT, t2.P2,   -- 等待事件的P2信息
       t2.p3TEXT, t2.P3,   -- 等待事件的P3信息
       t3.SQL_FULLTEXT     -- 被执行的SQL完整内容
  from v$process t1, v$session t2, v$sql t3
 where t1.ADDR = t2.PADDR
   and t2.STATUS = 'ACTIVE'
-- 表示当前正在执行SQL的会话
-- and t2.STATUS = 'INACTIVE'
-- 表示当前等待执行SQL的会话
-- and t2.STATUS = 'KILLED'
-- 表示当前会话正在被杀掉,未提交事务强制回滚
   and t2.SQL_ID = t3.SQL_ID;
-- t2.sid, t2.SERIAL#      可以用作库级杀死会话:alter system kill session 't2.sid, t2.SERIAL#';
-- t1.SPID OS_PID          可以用作系统级杀死会话:kill -9 t1.SPID
-- t2.EVENT 和 P1、P2、P3  不同的等待事件的P1、P2和P3的信息是不尽相同的,具体要查官档
-- t3.SQL_FULLTEXT         是一个CLOB类型的字段

去掉注释,较为清爽的ctrl+c版SQL:

select t2.sid, t2.SERIAL#, t1.SPID OS_PID,
       t3.SQL_ID, t2.EVENT,
       t2.P1TEXT, t2.P1, t2.p2TEXT, t2.P2,
       t2.p3TEXT, t2.P3, t3.SQL_FULLTEXT
  from v$process t1, v$session t2, v$sql t3
 where t1.ADDR = t2.PADDR
   and t2.STATUS = 'ACTIVE' -- 'INACTIVE'
   and t2.SQL_ID = t3.SQL_ID;

[TOC]

    原文作者:VincentQB
    原文地址: https://blog.csdn.net/zwjzqqb/article/details/79801337
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞