找到oracle进程调用者

最近在使用基于aix的oracle,通过topas发现cpu使用率过高,在90%以上,一直是两个oracle的进程在工作。

因为外部程序访问oracle最终都体现在oracle的进程,而不能发现最终的使用用户是谁,无法准确定位问题。找到一个sql,通过oracle的v$session,和v$process。

select  b.MACHINE, b.PROGRAM,b.OSUSER, b.USERNAME  , a.spid,b.sid

from v$process a, v$session b

where a.ADDR = b.PADDR and  b.USERNAME is not null  

通过这个sql,spid就是操作系统的进程id,sid是oracle 的sessionid,username就是数据库的schema,osname是操作系统用户。

  再通过这个sid可以通过下列的sql,找到正在执行的slq_id

  select sql_id from v$active_session_history where session_id ='22' order by sql_exec_start desc

  再通过这个sql_id最终找到正在执行的sql

  select * from v$sql where sql_id = 'fvvhhvzapqnjx' 

或者合并成一个sql

select b.* from v$active_session_history a,v$sql b where  a.session_id ='22' and a.sql_id=b.sql_id order by a.sql_exec_start desc

猜你喜欢

转载自eliotlb.iteye.com/blog/1431602