ITPub博客

首页 > 数据库 > Oracle > oracle中job和DBMS_SCHEDULER的启动和关闭

oracle中job和DBMS_SCHEDULER的启动和关闭

原创 Oracle 作者:wx13062302674 时间:2024-11-28 10:04:41 0 删除 编辑

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;



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27147296/viewspace-3051426/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: oracle中锁的查询
下一篇: dul 11的研究
请登录后发表评论 登录
全部评论
拥有oracle ocp,mysql ocp,pg ace,精通oracle底层恢复,精通pg,如文件勒索、触发器勒索恢复,asm磁盘组各种故障处理,在各行业中帮助用户恢复了大量的数据。公众号:数据库技术加油站,欢迎关注!

注册时间:2018-08-30

  • 博文量
    44
  • 访问量
    58103