分类: Oracle
2009-11-22 23:41:12
我们先学习几个比较关键的V$视图。
V$process
从linux中查询到的pid在V$process这个视图中,相对应的字段为spid,举例如下:在linux中,执行top命令,会显示出每个进程在linux中的pid,所属用户,运行的时间以及占用cpu的比率等,我们主要关注的是占用cpu较高的进程,我们记录pid号,查询语句为select spid,addr from v$process where spid = &pid(注:&pid为在top下的pid)。里面有很多的列,我们现在只需要两个字段就可以了,addr与V$session中的paddr关联。我们取得它是为了得到V$session的相关数据。
V$session
在上面的sql语句得到的addr,经过下面的查询select sql_address from V$session where paddr=&addr,就可以得到sqlarea中的address。
V$sqlarea
sql_address就是在视图V$sqlarea中对应的字段address。
经过上面的,我们可以得到一个语句
SELECT sqlarea.SQL_TEXT
FROM V$session sess,V$process pro,V$sqlarea sqlarea
WHERE pro.sPID=&pid
AND sess.PADDR = pro.ADDR
AND sess.SQL_ADDRESS = sqlarea.ADDRESS
-- 查询操作系统进程正在执行的 SQL
SELECT b .sid oracleID , b . serial# , spid 操作系统 ID, paddr , sql_text 当前 SQL
FROM v$process a, v$session b , v$sqlarea c
WHERE a. addr = b . paddr AND spid = '6341' AND b . sql_hash_value = c . hash_value