Chinaunix首页 | 论坛 | 博客
  • 博客访问: 78390
  • 博文数量: 16
  • 博客积分: 591
  • 博客等级: 中士
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-23 10:48
文章分类
文章存档

2011年(7)

2010年(2)

2009年(6)

2008年(1)

分类: 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

阅读(2454) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~