怎樣找出正在run此procedure的用戶,然後將其kill呢

[复制链接]
查看11 | 回复2 | 2006-5-5 16:12:24 | 显示全部楼层 |阅读模式
怎樣找出正在run此procedure的用戶,然後將其kill呢
回复

使用道具 举报

千问 | 2006-5-5 16:12:24 | 显示全部楼层
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 '%%'
/
回复

使用道具 举报

千问 | 2006-5-5 16:12:24 | 显示全部楼层
最初由 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 就是要检查的存储过程名字
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行