停job就是将job的状态改为broken,然后杀死正在运行的job;将job unbroken可以直接调用exec dbms_job.broken(82,false); 。
1.确定要停止的JOB号
select * from dba_jobs_running;
2.Broken你确认的JOB
exec dbms_job.broken(82,true);
select job,log_user,broken,last_date,next_date from dba_jobs where job=82;
3.Kill 对应的Oracle Session
select sid,serial# from v$session where sid=144;
alter system kill session 'sid,serial#';
或
SELECT p.spid FROM v$session s, v$process p
WHERE s.paddr = p.addr
AND s.sid = 144;
直接KILL对应的操作系统的SESSION,如果使用ALTER SYSTEM KILL SESSION执行很长时间,其实可以使用OS的命令来快速KILL掉SESSION.
For Windows, at the DOS Prompt: orakill sid spid
For UNIX at the command line> kill –9 spid
4.检查你的JOB是否还在运行,如果还运行,多杀几次
select * from dba_jobs_running;
5.修改完成后,将job的BROKEN状态停止。
exec dbms_job.broken(82,false);
--手动执行job
exec dbms_job.run(82);
--dbms_job.broken过程定义,next_date参数默认为sysdate,如果不写,从broken到unbroken,
--即调用exec dbms_job.broken(82,false);,会运行对应的job。
PROCEDURE dbms_job.broken( job IN BINARY_INTEGER,
broken IN BOOLEAN,
next_date IN DATE DEFAULT SYSDATE );
注意:
调用dbms_job.broken过程,一定要commit;
从broken到unbroken,即调用exec dbms_job.broken(82,false);,会运行对应的job。
- --停job过程
- SQL> select * from dba_jobs_running;
- SID JOB FAILURES LAST_DATE LAST_SEC THIS_DATE THIS_SEC INSTANCE
- ---------- ---------- ---------- -------------- ---------------- -------------- ---------------- ----------
- 144 82 0 28-8月 -12 17:42:55 28-8月 -12 17:50:45 0
- SQL> exec dbms_job.broken(82,true);
- PL/SQL 过程已成功完成。
- SQL> commit;
- 提交完成。
- SQL> SELECT p.spid FROM v$session s, v$process p
- 2 WHERE s.paddr = p.addr
- 3 AND s.sid = 144;
- SPID
- ------------
- 4672
- ----------------------------#
- --使用操作系统命令
- C:\Windows\system32>orakill orcl 4672
- ----------------------------#
- --如果job还在运行,可以多次执行orakill orcl 4672
- SQL> select * from dba_jobs_running;
- 未选定行
转载于:https://blog.51cto.com/raugher/975509