在linux 系统中 用top命令查出CPU最高的SPID,再将SPID给存储过程,可以查出该进程的SQLTEXT
create or replace procedure pro_get_sqltext(pin_spid in varchar2,
pout_sqltext out varchar2,
pout_sqltests out clob,
pout_sql_kill_sid out varchar2) is
v_spid number := 0;
v_sid number := 0;
v_serial number := 0;
v_sqltext varchar2(4000) := '';
v_sqltexts clob:='';
v_sql_kill_sid varchar2(4000) :='';
begin
begin
select SID, serial#
into v_sid, v_serial
from v$session
where paddr in (select addr from v$process where spid in (pin_spid));
v_sql_kill_sid:=' alter system kill session '||''''||v_sid||','||v_serial||''''||';';
pout_sql_kill_sid:=v_sql_kill_sid;
exception
when NO_DATA_FOUND THEN
pout_sqltext := 'the sid do not be founded';
v_sql_kill_sid := 'the sid do not be founded';
end;
begin
select q.SQL_TEXT,q.SQL_FULLTEXT
into v_sqltext,v_sqltexts
from v$sqlarea q
where exists (select *
from v$sqltext a
where exists (select sql_hash_value
from v$session b
where b.SID = v_sid
and a.HASH_VALUE = b.sql_hash_value)
and q.SQL_ID = a.SQL_ID);
pout_sqltext := v_sqltext;
pout_sqltests:=v_sqltexts;
exception
when NO_DATA_FOUND then
pout_sqltext := 'the SQL_TEXT do not be founded';
end;
commit;
end pro_get_sqltext;