最近折腾oracle数据库
发现: select * from dba_jobs_running, 对应的几个job,next time 小于当前日期,所以这几个job一直在运行。
那么,怎么把这几个job给干掉呢?
一、在sql command中,执行:
sql> exec dbms_job.broken(1111,TRUE);
将 job 先broken
这个效果,就是让job 不再运行了。
可以看到,这个job的next time 已经变成 4000/1/1
二、sqlplus 中,执行:
select a.spid,b.sid,b.serial#
from v$process a ,v$session b
where a.addr = b.paddr
and sid in (select sid from dba_jobs_running);
记录下对应的spid
三、在windows 的 cmd中执行:
c:\Users\Administratror> orakill 数据库实例名 spid
四、再到sqlplus中查询:
select * from dba_jobs_running;
直到没有正在执行的jobs
需要提出的是,过程二和过程三执行完后要等待一会儿,过程四才能真正没有正在执行的job。如果等待了过程四都还有正在执行的job,那就重复执行过程二和过程三吧~~
这点非常关键。
五、sql command中,执行:
sql> exec dbms_job.remove(1111);
这样就把这个job给删除掉了。
ps:小技巧:
plsql->Tools->Sessions 可以看到当前所有的sessions,还可以筛选处于ACTIVE的session
用这个办法 kill session(spid)也非常有效!!!