oracle 查看进程执行的sql语句

来源:互联网 发布:淘宝美工免费教学视频 编辑:程序博客网 时间:2024/04/26 05:02

1、  先用ps -aux查询,发现有个进程占用大量CPU,记录下PID

2、  用语句SELECT a.username,a.sid,a.serial# FROM v$session a,v$process c
WHERE c.addr=a.paddr and spid=PID

查出相应的SESSION

3、  用语句select * from v$session_wait where sid=…

就查出等待事件是什么。

以上操作其实还可以用一个sql实现:

SELECT   /*+ ORDERED */
         sql_text
    FROM v$sqltext a
   WHERE (a.hash_value, a.address) IN (
            SELECT DECODE (sql_hash_value,
                           0, prev_hash_value,
                           sql_hash_value
                          ),
                   DECODE (sql_hash_value, 0, prev_sql_addr, sql_address)
              FROM v$session b
             WHERE b.paddr = (SELECT addr
                                FROM v$process c
                               WHERE c.spid = ‘&pid’))
ORDER BY piece ASC
/
这里我们涉及了3个视图,并应用其关联进行数据获取.
首先需要输入一个pid,这个pid即process id,也就是在Top或ps中我们看到的PID.
通过pid和v$process.spid相关联我们可以获得Process的相关信息
进而通过v$process.addr和v$session.paddr相关联,我们就可以获得和session相关的所有信息.
再结合v$sqltext,我们即可获得当前session正在执行的SQL语句.

通过v$process视图,我们得以把操作系统和数据库关联了起来.

原创粉丝点击