ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 脚本:监控当前活动的语句

脚本:监控当前活动的语句

原创 Linux操作系统 作者:ljm0211 时间:2012-07-02 10:56:27 0 删除 编辑
$more get_active_sql.sh
sqlplus -s /nolog <connect user/pass

set serveroutput on size 1000000

set lines 200
set pages 1000
set feedback off
column username format a72 word_wrapped
column program format a72 word_wrapped
column sql_text format a72 word_wrapped

declare

-- 自定义的存储过程,可以在一行内打印250个字符以上
procedure p (p_str in varchar2)
is
l_str long := p_str;
begin
loop
exit when l_str is null;
dbms_output.put_line(substr(l_str, 1, 250));
l_str := substr(l_str, 251);
end loop;
end;
-- 获得状态为ACTIVE的列表信息
begin
for x in (select * from (select a.username||'('||a.sid||','||a.serial#||') spid='||b.spid||
' hash_value='||to_char(a.sql_hash_value) username,
'program='||a.program||' et='||last_call_et program,sql_address
from v\$session a,v\$process b
where a.status = 'ACTIVE'
and a.paddr = b.addr
and rawtohex(sql_address) <> '00'
and a.username is not null
and sid <> (select sid from v\$mystat where rownum=1)
order by last_call_et desc) where rownum < 10)
loop

-- 打印状态信息

dbms_output.put_line( '--------------------------------------------------' );
dbms_output.put_line( x.username );
dbms_output.put_line( x.program );
-- 打印 SQL 语句
for y in ( select sql_text
from v\$sqltext_with_newlines
where address = x.sql_address
order by piece )
loop
p(y.sql_text);
end loop;
end loop;
end;
/

exit

EOF


调用方法:
$./get_active_sql.sh

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11411056/viewspace-734292/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-05-14

  • 博文量
    272
  • 访问量
    436756