首页 > 数据库 > Oracle > 如何查杀正在运行的job
1. 首先确定要停止的 JOB 号
select * from dba_jobs_running;--得到sid和job号
2.Broken确认的 JOB
可以在 PL/SQL Developer 中,直接选项 broken ;
或者使用语句:
EXEC DBMS_JOB.BROKEN(job#,TRUE);--加入job号,注意commit
3.Kill 对应的Oracle Session
select SID,SERIAL# from v$session where sid='97' --根据sid号,得到SERIAL#
找到该job 的对应SESSION(SID,SERIAL#) ,然后执行以下命令:
ALTER SYSTEM KILL SESSION 'sid,serial#';
-- 如果使用ALTER SYSTEM KILL SESSION 执行很长时间,其实可以使用OS 的命令来快速KILL 掉SESSION. 步骤如下:
select paddr from v$session where sid='97'--根据sid号,得到paddr select spid from v$process where addr='6C8F14C4' -- 加入paddr的值,得到spid的值,杀命令时用 For Windows, at the DOS Prompt: orakill oraclesid spid--注意oraclesid为数据库实例名 For UNIX at the command line> kill –9 spid
4. 检查你的JOB 是否还在运行
检查你要停止的 JOB 是否还在运行,其实多数情况下,应该都已经停止了。尤其执行的第三步的 “ 杀手 ” 命令。
如果真的还是没有停止,而且 dba_jobs_running 已经查不到该 job 了,则执行以下步骤;
5.select name,value from v$parameter where name ='job_queue_processes';
将 Job Queue Processes 的数目修改为 0
ALTER SYSTEM SET job_queue_processes = 0;
job_queue_processes
取值范围为
0
到
1000
,总共可创建多少个
job
进程由
job_queue_processes
参数来决定。
注:当 Job Queue Processes 的数目为 0 ,所有的 JOB 都会停止。
6.修改你要修改的任何东西,甚至是 JOB内的内容。将 job执行的所有东西注掉,写 return;否则不能编译
也可以将 job 里调用的所有存储过程内容都注掉,写 return ;编译。
7.修改完成后,将 job的 BROKEN状态停止。
SQL>EXEC DBMS_JOB.BROKEN(job#,FALSE); -- 必须 commit
或者在 PL/SQL Developer 图形界面上操作,也一样;将 job 重新启起来。
8.恢复 job_queue_processes的原始值
ALTER SYSTEM SET job_queue_processes = 10;
此时刷新几次
job
,
total time
一会儿就会停止增长。
job
彻底停止
查看当前 job进程:
ps -ef | grep zmhtxdy| grep ora_j | grep -v grep
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70013625/viewspace-3092616/ ,如需转载,请注明出处,否则将追究法律责任。