oracle中job和DBMS_SCHEDULER的启动和关闭
在日常运维过程中,很多人遇到job和调度分不清楚,当出现问题后,不知道怎么关闭、禁止和启动。这里将脚本整理了发出来,分享给大家。
DBMS_SCHEDULER的启动和关闭
--先禁用job SELECT a.owner,a.job_name,'EXEC dbms_scheduler.disable('''|| a.owner||'.'||a.job_name||''');' from DBA_SCHEDULER_JOBS a WHERE a.OWNER NOT IN( 'SYS','EXFSYS','SYSTEM') --需要排除的用户 AND a.ENABLED = 'TRUE'; --启用的job --再停止job SELECT a.owner,a.job_name,'EXEC dbms_scheduler.stop_job('''|| a.owner||'.'||a.job_name||''',FORCE=>TRUE);' from DBA_SCHEDULER_JOBS a WHERE a.OWNER NOT IN( 'SYS','EXFSYS','SYSTEM') --需要排除的用户 AND a.ENABLED = 'TRUE'; --启用的job
--如果要删除
EXEC DBMS_SCHEDULER.DROP_JOB(job_name => 'JOB_NAME');
job 的启动和关闭
--查看运行
select * from dba_jobs_running;
-- 手工修改job状态停止job begin dbms_job.broken(job_id,true,sysdate); commit; end;
-- 批量停止job(需要登录到指定用户执行) DECLARE v_job NUMBER; BEGIN FOR v IN (SELECT job FROM user_jobs WHERE what LIKE '%sp_for_all_new%') LOOP dbms_job.broken(v.job,TRUE,SYSDATE); COMMIT; END LOOP; COMMIT; END; -- 批量删除job(需要登录到指定用户执行) DECLARE v_job NUMBER; BEGIN FOR v IN (SELECT job FROM user_jobs WHERE what LIKE '%sp_for_all_new%') LOOP dbms_job.remove(v.job); COMMIT; END LOOP; COMMIT; END;
-- 杀掉被锁住的job会话(kill lock job session) SELECT DISTINCT ''''||a.SID||','||a.SERIAL#||',@'||a.INST_ID||'''' AS si_id,a.*,b.* FROM gv$session a ,(SELECT v.sid,v.ID2 JOB,v.INST_ID inst_id FROM sys.job$ j ,gv$lock v WHERE v.type = 'JQ' AND j.job(+) = v.ID2) b ,gv$instance c WHERE a.INST_ID = b.inst_id AND a.SID = b.sid AND a.INST_ID = c.INST_ID AND c.INST_ID = b.inst_id AND b.job = 86441021;
