通过操作系统上的PID找出相应的SQL语句

本文介绍如何在Linux环境中使用TOP命令定位到Oracle进程,并通过操作系统进程ID(PID)查询对应SQL语句的方法。首先从PID获取会话ID(SID),接着利用SID找出具体的SQL文本内容。
linux平台下,我们一般通过TOP命令,查看性能消耗最大的进程,如果看到是oracle进行,那么就需要通过进程号,查询该进程当前执行的SQL语句,网上百度有很多SQL,我一般通过下面的方式进行查找:

通过操作系统上的PID找出相应的SQL语句的SID:

SELECT s.sid, p.spid FROM v$session s, v$process p WHERE s.paddr = p.addr  AND  < p.spid = <os pid> 


然后通过SID找出相应的SQL语句的具体内容:


SELECT s.sid, s.status, q.sql_text FROM v$session s, v$sqltext q WHERE s.sql_hash_value = q.hash_value AND s.sql_address = q.address AND s.sid = <sid> order by q.piece;

合并一


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
/


合并二:

Select s.Sid, s.Status, q.Sql_Text
From V$session s, V$sqltext q
Where s.Sql_Hash_Value = q.Hash_Value And s.Sql_Address = q.Address And
                        s.Sid In (Select s.Sid
                                                                 From V$session s, V$process p
                                                                 Where s.Paddr = p.Addr And  p.Spid = '&pid' )
Order By q.Piece;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值