使用这个过程就可以看到谁在执行一个存储过程
使用这个过程就可以看到谁在执行一个存储过程
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;
如果该存储过程有读写数据的话,你可以用strace -p 进程号
看是不是有很多数据在读写,solaris用truss
查找进程号和SQL语句可以用
select a.program,
a.machine,
b.spid, --进程号
c.sql_text,
a.status
from v$session a,
v$process b,
v$sqlarea c
where a.paddr=b.addr
and a.sql_hash_value=c.hash_value
and a.sql_address=c.address
and a.sid = ???;
--正在运行的语句
select a.program,
a.machine,
a.sid,
c.sql_text,
to_char(a.LOGON_TIME,'yyyy-mm-dd hh24:mi:ss')
from v$session a,
v$process b,
v$sqlarea c
where a.paddr=b.addr
and a.PREV_HASH_VALUE=c.hash_value
and a.PREV_SQL_ADDR=c.address
and a.sid = ???;
--已经运行完的语句
你也可以用
select TIME_REMAINING,ELAPSED_SECONDS from v$session_longops where sid =???
看看TIME_REMAINING是什么值
select count(*) into vn_number
from SYS.V_$ACCESS a,SYS.V_$session b where a.type='PROCEDURE'
and a.OBJECT like 存储过程名称' and a.sid=b.sid and b.status='ACTIVE';--判断当前存储过程是否正在运行!
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;
如果该存储过程有读写数据的话,你可以用strace -p 进程号
看是不是有很多数据在读写,solaris用truss
查找进程号和SQL语句可以用
select a.program,
a.machine,
b.spid, --进程号
c.sql_text,
a.status
from v$session a,
v$process b,
v$sqlarea c
where a.paddr=b.addr
and a.sql_hash_value=c.hash_value
and a.sql_address=c.address
and a.sid = ???;
--正在运行的语句
select a.program,
a.machine,
a.sid,
c.sql_text,
to_char(a.LOGON_TIME,'yyyy-mm-dd hh24:mi:ss')
from v$session a,
v$process b,
v$sqlarea c
where a.paddr=b.addr
and a.PREV_HASH_VALUE=c.hash_value
and a.PREV_SQL_ADDR=c.address
and a.sid = ???;
--已经运行完的语句
你也可以用
select TIME_REMAINING,ELAPSED_SECONDS from v$session_longops where sid =???
看看TIME_REMAINING是什么值
select count(*) into vn_number
from SYS.V_$ACCESS a,SYS.V_$session b where a.type='PROCEDURE'
and a.OBJECT like 存储过程名称' and a.sid=b.sid and b.status='ACTIVE';--判断当前存储过程是否正在运行!
 
posted on 2005-01-26 00:23 知道得越多知道的越少 阅读(613) 评论(0) 收藏 举报
 
                    
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号