最初由 husthxd 发布
[B]select t1.username,t1.status,t2.sql_text
from v$session t1,v$sqlarea t2
where t1.sql_hash_value = t2.hash_value
and t1.username is not null
and t2.sql_text like '%%'
/ [/B]
husthxd这个方法不大准确,一个session在执行存储过程的时候,当前的sqltext 不一定是存储过程的名字,很有可能是过程里面的某一个sql。
建议使用以下这个方法,非常准确:
---必须要建立在sys用户下:
create or replace procedure sys.who_is_using(obj_name varchar2) is
begin
dbms_output.enable(1000000);
for i in (SELECT distinct b.username,b.sid
FROM SYS.x$kglpn a,v$session b,SYS.x$kglob c
WHERE a.KGLPNUSE = b.saddr
and upper(c.KGLNAOBJ)like upper(OBJ_NAME)
and a.KGLPNHDL = c.KGLHDADR)
loop
dbms_output.put_line('('||to_char(i.sid)||') - '||i.username);
end loop;
end;
参数obj_name 就是要检查的存储过程名字 |