1.检查JOB_QUEUE_PROCESSES参数;
show parameter job_queue_process;
看看结果是不是0,如果是这个原因,可以修改此参数(本次不是)
ALTER SYSTEM SET job_queue_processes = 10;
2.查JOBS的状态:
select * From all_jobs; 查看所有JOBS
select * from user_jobs; 查看用户JOBS
SELECT * from DBA_JOBS; 查看DBA的JOBS
确定 BROKEN 是不是是Y 是Y说明JOBS被BROKEN了
确定Last_date/This_Date/Next_Date是否有异常,如果Next_Date异常,可能系统时间有问题或任务一直在执行. 一直在执行的可以从Total_time里看出
*查系统时间:
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;
3. 查正在运行的JOBS.
select * From DBA_JOBS_RUNNING; 查目前正在执行的任务, 确定任务是不是一直在执行(这次就是这问题)
今天已是 2021-07-26 14:25 上面的JOBS明显有问题,执行了几天....
4.处理超时运行的JOB
---通过SID获得serial
select SID,SERIAL# from V$Session where SID='156';
--终结正在运行的Job
alter system kill session '156,60139';
因这些SID执行太久,在Navicat里被抛出有迷惑性的提示: SID不存.
然后到服务器上(SQLPLUS / as sysdba)执行:
也无法KILL.
--通过SID查找到SPID
select spid, osuser, s.program from v$session s,v$process p where s.paddr=p.addr and s.sid=620;
然后在OS层面用 KILL -9 86330 执行KILL. 查看DBA_JOBS_RUNNING可以看到这里KILL不会即时收效,有较长的延时时间,但最终会KILL成功.