刪除一個執行很久的JOB

先以下列的SQL找出正在running的job,並確認要刪除的job及sid。
select /*+ rule */ * from dba_jobs_running;

假設找到的 job=1640,sid=32

查job的內容
select * from dba_jobs where job=1640;

將job的broken改為Y
exec dbms_job.broken(1640,true);

找出執行job session的sid、serial#、OS process id
select vs.sid,vs.serial#,vp.spid,vs.*,vp.* from v$session vs,v$process vp
    where vp.addr=vs.paddr and vs.sid=32 ;
    
假設找到的是 serial#=7,spid=9642

刪除session
alter system kill session '31,7';

如果 kill 的時間很久,也可以直接由OS刪除,如我的系統是UNIX:
kill -9 9642


將job的broken恢復成N
exec dbms_job.broken(1640,false);

Oracle DB的listener.log清理