oracle 干掉执行线程

我们经常出现执行大数据量sql时,由于各种原因,我们想取消掉,此时在pl/SQL中选择了停止,但是被锁的表始终没有释放,因此我们可以如下操作

 

--查询锁住的表,以及对应的session状态,当状态为active时,执行"active时初级杀掉死锁线程SQL"可以杀掉正在执行的线程,但是很多时候运行后状态会变为killed,这时数据库在回滚操作,这个时间有时会非常的慢,如果你没有耐心,或者是赶时间,可以执行"kill时杀掉死锁线程命令",注意这个命令不是在sql中执行的,而是在数据库服务器机子上执行的,作用是杀掉指定线程,一定要慎重。

此外“客户端ip”这个需要额外的触发器支持

 

create or replace trigger on_logon_trigger
after logon on database
begin
  dbms_application_info.set_client_info(sys_context('userenv', 'ip_address'));
end;
/

 

 


 

select t3.STATUS 线程状态,'alter system kill session ''' || t3.sid || ',' || t3.serial# || ''';' active时初级杀掉死锁线程SQL,
 'orakill ' || t4.instance_name || ' ' || t5.spid kill时杀掉死锁线程命令,
t1.SESSION_ID sessionid,t3.SERIAL# , t2.OBJECT_NAME 被锁住的对象,
t2.OBJECT_TYPE 被锁住的类型,t1.ORACLE_USERNAME 数据库用户,
 t1.OS_USER_NAME 操作系统用户 ,t3.CLIENT_INFO 客户端ip_需要额外触发器支持
from V$LOCKED_OBJECT t1 ,USER_OBJECTS t2,v$session t3,v$instance t4,v$process t5
where t1.OBJECT_ID   =   t2.OBJECT_ID and t1.SESSION_ID=t3.SID and t5.addr=t3.PADDR

 

你可能感兴趣的:(oracle,sql,OS)