加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Oracle停掉一个正在运行的job

(2012-11-18 18:47:34)
标签:

oracle

job

it

分类: 技术

今天碰到一个这个问题,由于一个job执行的时间过长,所以打算将其分为几块去执行,这个job又是每天按时执行的。


下面来看怎么实现:
第一步:查看正在运行的jobs
SQL>select * from dba_jobs_running;


然后确定你要停止的job,这个数据字典对应的job就是下面要执行的过程的第一个参数。


第二步:确定要停掉的job的SID,SERIAL#和系统进程id
select b.SID,b.SERIAL#,c.SPID
from dba_jobs_running a,v$session b,v$process c
where a.sid = b.sid and b.PADDR = c.ADDR


第三步:调用dbms_job的broken函数将要停止的job干掉
SQL>  EXEC DBMS_JOB.BROKEN(18,TRUE);

PL/SQL procedure successfully completed


SQL>commit;


此时这个job还是运行的,可以通过dba_jobs_running查看


第四步:使用alter system kill session 'SID,SERIAL#;杀掉会话。


如果要杀很久,直接使用操作系统命令
kill -9 spid

 


第五步:调整这个job


第六步:将这个job置为正常状态
SQL> EXEC DBMS_JOB.BROKEN(18,FALSE);


commit;

 


此时如果直接提交了的话,可能就会马上执行这个job,如果不想让其今天再执行了,可以这样处理,先将这个job remove然后在创建一个新的job


例如


SQL> exec dbms_job.remove(18)

PL/SQL procedure successfully completed

SQL> commit;


再创建一个新的
SQL> declare v_job number;
  begin
  dbms_job.submit(v_job,'pro_bak_job;',to_date('2012-11-17 02:00:00','yyyy-mm-dd hh24-mi-ss'),'TRUNC(SYSDATE+1)+2/24',false);
  commit;
  end;
  /

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有