在Oracle中,如何根据OS进程快速获得DB进程信息与正在执行的语句?
在OS上执行top命令之后就可以得到OS进程,那么怎么快速根据OS进程号获得DB信息呢?可以编写如下脚本:
$more whoit.sh
#!/bin/sh
sqlplus nolog <<EOF
connect as sysdba
col machine format a30
col program format a40
set line 200
select sid,serial# ,username,osuser,machine,program,process,to_char(logon_time,'yyyy/mm/dd hh24:mi:ss')
from v\$session where paddr in
( select addr from v\$process where spid in($1));
select sql_text from v\$sqltext_with_newlines
where hash_value in
(select SQL_HASH_VALUE from v\$session where
paddr in (select addr from v\$process where spid=$1)
)
order by piece;
exit;
EOF
然后要在OS环境下如下传入OS进程号执行即可:
$./whoit.sh Spid
有了OS进程号后,也可以在数据库中直接查询:
SELECT B.SID,B.SERIAL# ,C.SPID ,B.SQL_ID
FROM V$SESSION B ,V$PROCESS C
WHERE B.PADDR=C.ADDR AND C.SPID=XXXX;
● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● QQ:646634621 QQ群:230161599
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步
长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。




