日期:2014-05-16  浏览次数:20342 次

找到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

?

?